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
Enregistrer un commentaire