Une partie de notre API RESTful permettra aux utilisateurs d'enregistrer un élément avec un numéro de série. Comme le numéro de série est pas globalement unique, il ne peut pas être utilisé comme identifiant de la ressource, donc nous allons utiliser un POST à la ressource mère qui va générer un identifiant, par exempleEn réponse à une requête HTTP POST idempotent
POST /my/items
<item serial-number="ABCDEF" />
Dans le cas où l'élément n'est pas déjà enregistré, la sémantique HTTP est bien définie. Nous retournons un en-tête Location et l'élément enregistré en tant que corps d'entité, par ex.
HTTP 201 Created
Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
Cependant, dans le cas où l'élément est déjà enregistré, l'API devrait être idempotent et retourner l'élément précédemment enregistré sans créer un nouveau. Ma meilleure estimation est qu'il devrait alors retourner un code d'état 200 OK, et utiliser l'en-tête Content-Location pour indiquer d'où vient réellement l'élément, par ex.
HTTP 200 OK
Content-Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
Cela vous semble-t-il raisonnable? Je ne suis pas tout à fait clair si l'emplacement ou le contenu-emplacement est plus approprié dans le second cas.
Hmmm oui en fait j'aime celui-ci. Bien que les numéros de série ne soient pas globalement uniques, il existe une probabilité de près de 100% qu'ils soient uniques dans le cadre d'un utilisateur, de sorte qu'il pourrait agir comme un identificateur unique étendu. Cela permettrait également de résoudre mon problème de comment un appareil peut vérifier s'il est déjà enregistré en utilisant un GET sur cette URL et en vérifiant si la réponse est un 200 ou 404. Merci! –