Méthodes HTTP: un tour d'horizon

Nous allons faire un petit tour d'horizon des méthodes HTTPs, aussi bien utilisé dans nos navigateurs, que pour nos API REST, ou dans des approches SOA.


Les méthodes classiques

Faisant partit de la RFC 2616.

Méthode GET

Méthode signifiant tout simplement que nous voulons accéder à une ressource, aussi bien une image, qu'un contenu JSON, ...

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous avons le même résultat.

Cette méthode est safe (sûre), dans le sens que l'usage de cette méthode ne va pas changer le contexte.

Méthode POST

Méthode signifiant que nous voulons créer une nouvelle ressource

Cette méthode n'est pas idempotente, à savoir que pour l'appel de la même ressource, nous n'avons pas le même résultat. Un exemple: sur la page de création d'un nouvel utilisateur, si je clique très rapidement et plusieurs fois sur le bouton "créer", j'aurai plusieurs fois le même utilisateur, alors que je voulais en créer un seul.

De ce fait, cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Méthode PUT

Méthode signifiant que nous voulons mettre à jour ou créer une ressource. Une condition très importante: nous devons fournir la ressource au complet.

Ainsi, dans le cas où nous voulons créer une nouvelle ressource, nous allons fournir son identifiant, ce ne sera pas le serveur qui doit le fournir. L'usage de l'UUID  est alors très pratique.

Et ce qui est intéressant, c'est que nous pouvons imaginer un mode offline si nous utilisons PUT pour créer des nouvelles ressources, vu que nous avons à spécifier cet identifiant.

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous aurons le même résultat. Un exemple: sur la page de création d'un nouvel utilisateur, si je clique très rapidement et plusieurs fois sur le bouton "créer", j'aurai bien qu'un seul nouveau utilisateur.

En revanche, cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Méthode DELETE

Méthode signifiant que nous voulons supprimer une ressource.

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous aurons le même résultat. 

Cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Les méthodes moins classiques

Faisant partit de la RFC 2616.

Méthode HEAD

Méthode similaire à GET, hormis le fait que nous n'aurons pas le contenu du payload.

L'objectif ici est de n'avoir que les entêtes HTTP. Utile notamment dans le cas des Etag.

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous avons le même résultat.

Cette méthode est safe (sûre), dans le sens que l'usage de cette méthode ne va pas changer le contexte.

Méthode PATCH

Méthode similaire à PUT, hormis le fait que nous ne pouvons pas l'utiliser en mode "création", et que nous ne sommes pas obligé de fournir la ressource au complet.

Cela permet de faire une mise à jour partiel de notre ressource, sans avoir à connaître / charger la ressource au complet.

Cette méthode n'est pas idempotente, à savoir que pour l'appel de la même ressource, nous n'aurons pas le même résultat. En effet, car en retour de l'appel, nous aurons la ressource au complet. Et qui peut être différente de celle que nous avons, vu que nous n'avons pas eu à la récupérer avant la mise à jour.

Cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Méthode OPTIONS

Méthode permettant de connaître si nous pouvons nous connecter à la ressource en question. Cela est très important pour les gestion du CORS, à savoir quelles domaines / serveurs ont le droit à utiliser la ressource (dans le cas des navigateurs, cet appel est fait automatiquement).

Ainsi, si nous faisons:

curl -X OPTIONS http://example.org -i


Nous aurons alors

HTTP/1.1 200 OK
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800
Date: Thu, 13 Oct 2016 11:45:00 GMT
Expires: Thu, 20 Oct 2016 11:45:00 GMT
Server: EOS (lax004/2813)
x-ec-custom-error: 1
Content-Length: 0

Où "Allow" permet de nous dire avec quelles méthodes HTTP nous pouvons accéder à cette ressource. Si "none" ou vide, nous ne pouvons rien faire dessus.

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous avons le même résultat.

Cette méthode est safe (sûre), dans le sens que l'usage de cette méthode ne va pas changer le contexte.

Méthode CONNECT

Méthode permettant d'ouvrir une connexion bi-directionnel avec la ressource. Utilisé notamment pour ouvrir un tunnel SSL.

Cette méthode n'est pas idempotente, à savoir que pour l'appel de la même ressource, nous n'aurons pas le même résultat. 

Cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Méthode TRACE

Méthode similaire à GET, hormis le fait que nous aurons uniquement du contenu texte qui n'est pas fonctionnel, mais plus des données techniques.

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous avons le même résultat.

Cette méthode est safe (sûre), dans le sens que l'usage de cette méthode ne va pas changer le contexte.

Les méthodes atypiques

Méthode CHECKOUT

Méthode qui restaure la dernière version d'une ressource versionnée. C'est utilisé autour du WebDAV

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous avons le même résultat.

Cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Méthode COPY

Méthode qui va copier une ressource ! C'est utilisé autour du WebDAV et donc dans le payload, nous avons un format XML pour préciser la ressource source et la ressource cible.

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous avons le même résultat.

Cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Méthode LOCK

Méthode qui verrouille une ressource versionnée. C'est utilisé autour du WebDAV

Cette méthode n'est pas idempotente, à savoir que pour l'appel de la même ressource, nous n'avons  pas le même résultat. En l'occurence ici, nous aurons une erreur 4XX car nous essayer de verrouiller une source déjà verrouillée.

Cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Méthode MERGE

Méthode qui littéralement fait ... du merge de code ! C'est utilisé autour du WebDAV et donc dans le payload, nous avons un format XML pour préciser la branche du code source et cible.

Cette méthode est idempotente, à savoir que pour l'appel de la même ressource, nous avons le même résultat.

Cette méthode n'est pas safe (sûre), dans le sens que l'usage de cette méthode va changer le contexte.

Une vue générale

En somme, nous avons à peu près une quarantaine de méthodes HTTP, normalisée, et voici une vue d'ensemble (sans forcément entrer dans les détails, car beaucoup sont utilisés dans le cas du WebDAV):



HTTP méthode
« Sûre »
Idempotent
Référence 
Usage 
ACL
non
oui
WebDAV
BASELINE-CONTROL
non
oui
WebDAV
BIND
non
oui
WebDAV
CHECKIN
non
oui
WebDAV
CHECKOUT
non
oui
WebDAV
CONNECT
non
oui
HTTP/1.1
COPY
non
oui
WebDAV
DELETE
non
oui
HTTP/1.1
GET
oui
oui
HTTP/1.1
HEAD
oui
oui
HTTP/1.1
LABEL
non
oui
WebDAV
LINK
non
oui
HTTP/1.1
LOCK
non
oui
WebDAV
MERGE
non
oui
WebDAV
MKACTIVITY
non
oui
WebDAV
MKCALENDAR
non
oui
CalDAV
MKCOL
non
oui
WebDAV
MKREDIRECTREF
non
oui
WebDAV
MKWORKSPACE
non
oui
WebDAV
MOVE
non
oui
WebDAV
OPTIONS
oui
oui
HTTP/1.1
ORDERPATCH
non
oui
WebDAV
PATCH
non
non
HTTP/1.1
POST
non
non
HTTP/1.1
PRI
oui
oui
HTTP/2
PROPFIND
oui
oui
WebDAV
PROPPATCH
non
oui
WebDAV
PUT
non
oui
HTTP/1.1
REBIND
non
oui
WebDAV
REPORT
oui
oui
WebDAV
SEARCH
oui
oui
WebDAV
TRACE
oui
oui
HTTP/1.1
UNBIND
non
oui
WebDAV
UNCHECKOUT
non
oui
WebDAV
UNLINK
non
oui
HTTP/1.1
UNLOCK
non
oui
WebDAV
UPDATE
non
oui
WebDAV
UPDATEREDIRECTREF
non
oui
WebDAV
VERSION-CONTROL
non
oui
WebDAV


Enjoy !

Commentaires

Posts les plus consultés de ce blog

ISO: liens & outils utiles

NodeJs et SSL: une petite analyse

Créer sa commande slack en quelques minutes