04/06/2024 - 09:17:27


6'04"
Contexte — Mise en garde
Le sujet de cette page est de détailler quelques requêtes HTTP qui sont réalisées dans le cadre de l'écriture de services et microservices de type REST.
Types de requêtes
CONNECT
: requête qui consiste à demander la conversion de la requête vers un tunnel TCP/IP (par exemple de HTTP vers HTTPS).DELETE
: requête qui consiste à demander la suppression d'une ressource.GET
: requête qui consiste à demander une ressource.HEAD
: requête qui demande de l'information concernant une ressource sans demander la ressource proprement dit.OPTIONS
: requête qui consiste à demander au serveur quelles sont les méthodes HTTP supportées.PATCH
: requête qui consiste à demander au des modifciations partielle de la ressource visée.POST
: requête qui consiste à poster des données sur un serveur (le cas typique est celui des données d'un formulaire). POST est une requête de création.PUT
: requête qui consiste à stocker une entité (sens générique) à une URI (Uniform Resource Identifier). Si l'entité existe, elle est supposée être mise à jour.PUT
est une requête de création ou de mise à jour.TRACE
: requête qui consiste à reproduire la requête envoyée. Cette requête peut être utilisée pour voir si la requête a été modifiée par des serveurs intermédiaires
Lorsque que TRQL Radio crée des services, ceux-ci sont, pour la
plupart des requêtes GET
ou POST
. Plus
rarement nous utilisons des PUT
.
Les méthodes sans danger
Certaines méthodes ne font que requérir de l'information; d'autres causent des modifications du côté du serveur. Les méthodes suivantes sont considérées sans danger car elles n'entraînent aucune modification :
GET
HEAD
OPTIONS
TRACE
Ceci est la raison principale pour laquelle nous utilisons très
très souvent la méthode GET
.
Les méthodes idempotentes
Qu'est-ce que c'est ce bazar ? En mathématiques ou en programmation, idempotent qualifie une opération ou fonction produisant le même résultat, indépendamment du nombre de fois qu'elle est appliquée. Et c'set exactement de cela dont il s'agit.
Il ressort de cette définition que toutes les méthodes sans
danger sont aussi des méthodes idempotentes. PUT
et DELETE
sont également des méthodes idempotentes.
POST
et PATCH
ne sont PAS idempotentes
(c'est d'ailleurs la raison pour laquelle, sur certains sites, on
vous demande de ne pas cliquer plusieurs fois sur le même bouton —
méthode POST
).
Petit tableau récapitulatif
Méthode | Corps de la demande | Corps de la réponse | Sans danger | Idempotente | Cachable |
---|---|---|---|---|---|
CONNECT | Oui | Oui | Non | Non | Non |
DELETE | Non | Oui | Non | Oui | Non |
GET | Non | Oui | Oui | Oui | Oui |
HEAD | Non | Non | Oui | Oui | Oui |
OPTIONS | Optionnel | Oui | Oui | Oui | Non |
PATCH | Oui | Oui | Non | Non | Non |
POST | Oui | Oui | Non | Non | Yes |
PUT | Oui | Oui | Non | Yes | Non |
TRACE | Non | Oui | Oui | Oui | Non |
Codes de retour
Les codes de retour HTTP sont divisés en catégories :
- 100: codes informationnels par nature
- 200: codes de conditions de succès
- 300: codes de redirections
- 400: codes de conditions d'erreur du côté client
- 500: codes de conditions d'erreur du côté serveur
De notre côté, nous avons établi une série de define
s
notre code PHP afin de garantir que nous utilisons les codees de
retour de manière uniforme. Voici ce que cela donne :
<?php /****************************************************************************************/ /* {PYB} is a shortcut for Patrick Boens {COMPANY} is a shortcut to "Lato Sensu Management" {RIGHTS} is a shortcut used by trql.documentor.class.php. In general the material presented here is available under the conditions of https://creativecommons.org/licenses/by-sa/4.0/ Other shortcuts exist. They exist to make it simple to change the formulation of parts that can vary over time. It does not change the undisputed truth that ALL code has been created by Patrick Boens, the author, who owns ALL the intellectual property of what he created. */ /** {{{*fheader {*file trql.http-error-codes.h *} {*purpose A list of HTTP error codes *} {*author {PYB} *} {*company {COMPANY} *} {*cdate 30/08/2022 09:04 *} {*mdate auto *} {*license {RIGHTS} *} {*UTF-8 Quel bel été sous le hêtre *} ------------------------------------------------------------------------------------- Changes History: ------------------------------------------------------------------------------------- {*chist {*mdate 30-08-2020 09:04 *} {*author {PYB} *} {*v 8.0.0000 *} {*desc 1) Original creation *} *} {*chist {*mdate 04/06/2024 09:12 *} {*author {PYB} *} {*v 8.0.0000 *} {*desc 1) Adding few codes in the 100 and 400-series *} *} *}}} */ /****************************************************************************************/ /* Doc: https://www.rfc-editor.org/rfc/rfc9110.html#name-status-codes */ if ( ! defined( 'HTTP_STATUS_CODES' ) ) /* If HTTP codes not defined */ { define( 'HTTP_STATUS_CODES',0 ); defined( 'HTTP_STATUS_CODE_CONTINUE' ) or define( 'HTTP_STATUS_CODE_CONTINUE' ,100 ); defined( 'HTTP_STATUS_CODE_SWITCHING_PROTOCOLS' ) or define( 'HTTP_STATUS_CODE_SWITCHING_PROTOCOLS' ,101 ); defined( 'HTTP_STATUS_CODE_OK' ) or define( 'HTTP_STATUS_CODE_OK' ,200 ); defined( 'HTTP_STATUS_CODE_SUCCESS' ) or define( 'HTTP_STATUS_CODE_SUCCESS' ,200 ); defined( 'HTTP_STATUS_CODE_CREATED' ) or define( 'HTTP_STATUS_CODE_CREATED' ,201 ); defined( 'HTTP_STATUS_CODE_ACCEPTED' ) or define( 'HTTP_STATUS_CODE_ACCEPTED' ,202 ); defined( 'HTTP_STATUS_CODE_NON_AUTHORITATIVE' ) or define( 'HTTP_STATUS_CODE_NON_AUTHORITATIVE' ,203 ); defined( 'HTTP_STATUS_CODE_NO_CONTENT' ) or define( 'HTTP_STATUS_CODE_NO_CONTENT' ,204 ); defined( 'HTTP_STATUS_CODE_RESET_CONTENT' ) or define( 'HTTP_STATUS_CODE_RESET_CONTENT' ,205 ); defined( 'HTTP_STATUS_CODE_PARTIAL_CONTENT' ) or define( 'HTTP_STATUS_CODE_PARTIAL_CONTENT' ,206 ); defined( 'HTTP_STATUS_CODE_MULTIPLE_CHOICES' ) or define( 'HTTP_STATUS_CODE_MULTIPLE_CHOICES' ,300 ); defined( 'HTTP_STATUS_CODE_MOVED_PERMANENTLY' ) or define( 'HTTP_STATUS_CODE_MOVED_PERMANENTLY' ,301 ); defined( 'HTTP_STATUS_CODE_FOUND' ) or define( 'HTTP_STATUS_CODE_FOUND' ,302 ); defined( 'HTTP_STATUS_CODE_SEE_OTHER' ) or define( 'HTTP_STATUS_CODE_SEE_OTHER' ,303 ); defined( 'HTTP_STATUS_CODE_NOT_MODIFIED' ) or define( 'HTTP_STATUS_CODE_NOT_MODIFIED' ,304 ); defined( 'HTTP_STATUS_CODE_USE_PROXY' ) or define( 'HTTP_STATUS_CODE_USE_PROXY' ,305 ); defined( 'HTTP_STATUS_CODE_RESERVED' ) or define( 'HTTP_STATUS_CODE_RESERVED' ,306 ); defined( 'HTTP_STATUS_CODE_TEMPORARY_REDIRECT' ) or define( 'HTTP_STATUS_CODE_TEMPORARY_REDIRECT' ,307 ); defined( 'HTTP_STATUS_CODE_BAD_REQUEST' ) or define( 'HTTP_STATUS_CODE_BAD_REQUEST' ,400 ); defined( 'HTTP_STATUS_CODE_NOT_OK' ) or define( 'HTTP_STATUS_CODE_NOT_OK' ,400 ); defined( 'HTTP_STATUS_CODE_NOK' ) or define( 'HTTP_STATUS_CODE_NOK' ,400 ); defined( 'HTTP_STATUS_CODE_KO' ) or define( 'HTTP_STATUS_CODE_KO' ,400 ); defined( 'HTTP_STATUS_CODE_UNAUTHORIZED' ) or define( 'HTTP_STATUS_CODE_UNAUTHORIZED' ,401 ); defined( 'HTTP_STATUS_CODE_PAYMENT_REQUIRED' ) or define( 'HTTP_STATUS_CODE_PAYMENT_REQUIRED' ,402 ); defined( 'HTTP_STATUS_CODE_FORBIDDEN' ) or define( 'HTTP_STATUS_CODE_FORBIDDEN' ,403 ); defined( 'HTTP_STATUS_CODE_NOT_FOUND' ) or define( 'HTTP_STATUS_CODE_NOT_FOUND' ,404 ); defined( 'HTTP_STATUS_CODE_METHOD_NOT_ALLOWED' ) or define( 'HTTP_STATUS_CODE_METHOD_NOT_ALLOWED' ,405 ); defined( 'HTTP_STATUS_CODE_NOT_ACCEPTABLE' ) or define( 'HTTP_STATUS_CODE_NOT_ACCEPTABLE' ,406 ); defined( 'HTTP_STATUS_CODE_PROXY_AUTHENTIFICATION_REQUIRED' ) or define( 'HTTP_STATUS_CODE_PROXY_AUTHENTIFICATION_REQUIRED' ,407 ); defined( 'HTTP_STATUS_CODE_REQUEST_TIMEOUT' ) or define( 'HTTP_STATUS_CODE_REQUEST_TIMEOUT' ,408 ); defined( 'HTTP_STATUS_CODE_CONFLICT' ) or define( 'HTTP_STATUS_CODE_CONFLICT' ,409 ); defined( 'HTTP_STATUS_CODE_GONE' ) or define( 'HTTP_STATUS_CODE_GONE' ,410 ); defined( 'HTTP_STATUS_CODE_LENGTH_REQUIRED' ) or define( 'HTTP_STATUS_CODE_LENGTH_REQUIRED' ,411 ); defined( 'HTTP_STATUS_CODE_PRECONDITION_FAILED' ) or define( 'HTTP_STATUS_CODE_PRECONDITION_FAILED' ,412 ); defined( 'HTTP_STATUS_CODE_REQUEST_ENTITY_TOO_LARGE' ) or define( 'HTTP_STATUS_CODE_REQUEST_ENTITY_TOO_LARGE' ,413 ); defined( 'HTTP_STATUS_CODE_REQUEST_URI_TOO_LONG' ) or define( 'HTTP_STATUS_CODE_REQUEST_URI_TOO_LONG' ,414 ); defined( 'HTTP_STATUS_CODE_UNSUPPORTED_MEDIA_TYPE' ) or define( 'HTTP_STATUS_CODE_UNSUPPORTED_MEDIA_TYPE' ,415 ); defined( 'HTTP_STATUS_CODE_REQUESTED_RANGE_NOT_SATISFIABLE' ) or define( 'HTTP_STATUS_CODE_REQUESTED_RANGE_NOT_SATISFIABLE' ,416 ); defined( 'HTTP_STATUS_CODE_EXPECTATION_FAILED' ) or define( 'HTTP_STATUS_CODE_EXPECTATION_FAILED' ,417 ); defined( 'HTTP_STATUS_CODE_MISDIRECTED_REQUEST' ) or define( 'HTTP_STATUS_CODE_MISDIRECTED_REQUEST' ,421 ); defined( 'HTTP_STATUS_CODE_UNPROCESSABLE_CONTENT' ) or define( 'HTTP_STATUS_CODE_UNPROCESSABLE_CONTENT' ,422 ); defined( 'HTTP_STATUS_CODE_UPGRADE_REQUIRED' ) or define( 'HTTP_STATUS_CODE_UPGRADE_REQUIRED' ,426 ); defined( 'HTTP_STATUS_CODE_TOO_MANY_REQUESTS' ) or define( 'HTTP_STATUS_CODE_TOO_MANY_REQUESTS' ,429 ); defined( 'HTTP_STATUS_CODE_REQUEST_HEADERS_TOO_LARGE' ) or define( 'HTTP_STATUS_CODE_REQUEST_HEADERS_TOO_LARGE' ,430 ); defined( 'HTTP_STATUS_CODE_UNAVAILABLE_DUE_TO_LEGAL_REASONS' ) or define( 'HTTP_STATUS_CODE_UNAVAILABLE_DUE_TO_LEGAL_REASONS' ,451 ); defined( 'HTTP_STATUS_CODE_INTERNAL_SERVER_ERROR' ) or define( 'HTTP_STATUS_CODE_INTERNAL_SERVER_ERROR' ,500 ); defined( 'HTTP_STATUS_CODE_NOT_IMPLEMENTED' ) or define( 'HTTP_STATUS_CODE_NOT_IMPLEMENTED' ,501 ); defined( 'HTTP_STATUS_CODE_BAD_GATEWAY' ) or define( 'HTTP_STATUS_CODE_BAD_GATEWAY' ,502 ); defined( 'HTTP_STATUS_CODE_SERVICE_UNAVAILABLE' ) or define( 'HTTP_STATUS_CODE_SERVICE_UNAVAILABLE' ,503 ); defined( 'HTTP_STATUS_CODE_GATEWAY_TIMEOUT' ) or define( 'HTTP_STATUS_CODE_GATEWAY_TIMEOUT' ,504 ); defined( 'HTTP_STATUS_CODE_HTTP_VERSION_NOT_SUPPORTED' ) or define( 'HTTP_STATUS_CODE_HTTP_VERSION_NOT_SUPPORTED' ,505 ); } ?>