REST POST est utilisé pour créer des ressources.
HTTP POST est utilisé pour beaucoup de choses. REST ne s'en soucie pas particulièrement; il veut juste des ressources qui supportent une interface uniforme, et hypermédia.
A ce réseau de points échoue
Bummer!
Maintenant quoi? Comment gérez-vous cela? Vous ne pouvez pas simplement réessayer de créer, car réessayer créera simplement un doublon (ce qui est mauvais).
Ceci est une préoccupation de messagerie générale, pas directement liée à REST. La solution la plus courante consiste à utiliser le modèle Idempotent Receiver.En bref, vous devez définir vos messages afin que le destinataire dispose de suffisamment d'informations pour reconnaître la requête comme quelque chose qui a déjà été fait.
Idéalement, ceci est pris en charge au business level.
Les collections de valeurs idempotentes sont souvent simples; nous avons juste besoin de penser définit, plutôt que listes.
Les collections d'entités les plus complexes sont plus complexes; Si la demande inclut un identifiant pour la nouvelle entité, ou si nous pouvons en calculer un à partir des données fournies, alors nous pouvons considérer notre collection comme un hachage.
Si aucune de ces approches ne convient, alors il y a une autre possibilité. Au lieu d'effectuer une mutation idempotente de la collection, nous rendons idempotente la mutation de la collection elle-même. Pensez à "comparer et échanger" - nous encodons dans l'information de demande qui identifie l'état actuel de la collection; Cet état est toujours actuel lorsque la demande arrive, puis la mutation est appliquée. Si la condition ne tient pas, alors la requête devient un no-op. En traduisant cela en HTTP, nous apportons une petite modification au protocole de mise à jour de la ressource de collection. D'abord, nous obtenons la représentation actuelle; et dans les métadonnées, le serveur fournit validators qui peut être utilisé dans des demandes subséquentes. Après avoir obtenu le validateur, le client évalue la représentation actuelle de la ressource pour déterminer si elle doit être modifiée. Si le client décide d'effectuer une modification, il soumet la modification avec un If-Match ou un en-tête If-Unmodified-Since, y compris le validateur. Le serveur, avant de traiter les demandes, considère alors le validateur, abandonnant immédiatement la demande avec 412 Precondition Failed.
Ainsi, si une demande de changement d'état conditionnel est perdue, le client peut, à sa propre discrétion, répéter la demande sans se soucier que le serveur ne comprenne pas l'intention du client.