Restful : C’est quoi une méthode safe ou idempotent ?

Safe

Les méthodes safe, sécurisées en français, sont toutes les méthodes HTTP qui ne modifient aucune ressource.

Par exemple, une requête GET sur une ressource ne devrait jamais modifier de données.

Ainsi, la requête suivant n’est pas correcte si son but est réellement de supprimer un utilisateur :

GET /user/delete/1234

L’avantage des méthodes safe c’est qu’elles peuvent être mise en cache ou en prefetch sans crainte, a condition de respecter cette règle.

Idempotent

Une méthode idempotente est une méthode qui peut être appelée autant de fois que l’on souhaite et qui retournera toujours le même résultat.

Par exemple, une méthode qui affecte une valeur à une ressource est idempotente :

username = mike

Peut être appelée un million de fois, le résultat sera toujours le même. Par conttre, la méthode qui ferait l’action suivante n’est pas idempotente :

user_age = user_age +1

On remarquera aussi que ces deux méthodes ne sont pas safe, elles modifient toutes les deux des données.

L’idempotence est importante quand on veut réaliser une API robuste. Par exemple si on permet d’effectuer une mise a jour via un POST ça peut poser un problème, imaginons que la requête de ce POST n’aboutisse pas (timeout par exemple) on peut alors se retrouver avec des données corrompues : faut-il recommencer ? La données a-elle été mise à jour ?

Si on utilise les méthodes idempotents à bons escient on n’a pas besoin de se poser ces questions et on peut renvoyer ces requêtes tant qu’elles ne passent pas correctement.

Un petit récapitulatif

METHODE HTTP Idempotent Safe
OPTIONS Oui Oui
GET Oui Oui
HEAD Oui Oui
PUT Oui Non
POST Non Non
DELETE Oui Non
PATCH Non Non

Pour avoir plus d’informations vous pouvez aller voir ce site référence: restcookbook.com