Ein Teil unserer RESTful-API ermöglicht es Benutzern, ein Element mit einer Seriennummer zu registrieren. Da die Seriennummer nicht global eindeutig ist, kann sie nicht als der Identifizierer der Ressource verwendet werden, so dass wir einen POST zu der Elternressource verwenden, der eine Kennung erzeugt, z.Auf eine idempotente HTTP-POST-Anforderung antworten
POST /my/items
<item serial-number="ABCDEF" />
In dem Fall, in dem das Element nicht bereits registriert ist, sind die HTTP-Semantik gut definiert. Wir geben einen Location-Header und das registrierte Objekt als Entity-Body zurück, z.
HTTP 201 Created
Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
jedoch in dem Fall, dass der Gegenstand bereits registriert ist, sollte die API idempotent und zurück, um die zuvor registrierten Artikel ohne einen neuen zu schaffen. Meine beste Vermutung ist, dass es dann einen 200-OK-Statuscode zurückgeben sollte und den Inhaltsort-Header verwenden sollte, um anzuzeigen, woher das Element tatsächlich kam, z.
HTTP 200 OK
Content-Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
Würde das vernünftig erscheinen? Ich bin mir nicht ganz klar, ob der Standort oder der Content-Standort im zweiten Fall besser geeignet ist.
Hmmm ja eigentlich mag ich diesen. Obwohl die Seriennummern möglicherweise nicht global eindeutig sind, gibt es eine Wahrscheinlichkeit von nahezu 100%, dass sie innerhalb des Bereichs eines Benutzers eindeutig sind, so dass sie als eindeutige Kennung im Gültigkeitsbereich fungieren kann. Es würde auch mein Problem lösen, wie ein Gerät überprüfen kann, ob es bereits registriert ist, indem es einen GET für diese URL verwendet und überprüft, ob die Antwort eine 200 oder 404 ist. Danke! –