Parte della nostra API RESTful consentirà agli utenti di registrare un articolo con un numero di serie. Poiché il numero di serie non è globalmente unico, non può essere utilizzato come identificativo della risorsa, quindi utilizzeremo un POST per la risorsa padre che genererà un identificatore, ad es.Risposta a una richiesta POST HTTP idempotente
POST /my/items
<item serial-number="ABCDEF" />
Nel caso in cui l'elemento non sia già registrato, la semantica HTTP è ben definita. Restituiamo un'intestazione Location e l'elemento registrato come corpo dell'entità, ad es.
HTTP 201 Created
Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
Tuttavia, nel caso in cui l'articolo è già registrato, l'API deve essere idempotente e restituire l'articolo precedentemente registrata senza creare uno nuovo. La mia ipotesi migliore è che debba quindi restituire un codice di stato 200 OK e utilizzare l'intestazione Content-Location per indicare da dove proviene effettivamente l'elemento, ad es.
HTTP 200 OK
Content-Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
Questo sembra ragionevole? Non sono del tutto chiaro se la Location o Content-Location sia più adatta nel secondo caso.
Hmmm sì in realtà mi piace questo. Sebbene i numeri seriali possano non essere univoci a livello globale, esiste quasi il 100% di probabilità che siano univoci nell'ambito di un utente in modo che possa fungere da identificatore univoco con ambito. Risolve anche il mio problema su come un dispositivo può verificare se è già registrato utilizzando un GET su questo URL e controllando se la risposta è un 200 o 404. Grazie! –