HTTP Request Methods

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 defines 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 );
}

?>
Telegram icon