Parte de nuestra API RESTful permitirá a los usuarios registrar un artículo con un número de serie. Como el número de serie no es globalmente único, no puede utilizarse como identificador del recurso, por lo que utilizaremos una POST para el recurso padre que generará un identificador, p.Respondiendo a una petición HTTP POST idempotente
POST /my/items
<item serial-number="ABCDEF" />
En el caso en que el elemento no esté ya registrado, la semántica de HTTP está bien definida. Devolvemos un encabezado de ubicación y el elemento registrado como el cuerpo de la entidad, p.
HTTP 201 Created
Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
Sin embargo, en el caso en que el objeto ya se ha registrado, la API debe ser idempotente y devolver el artículo previamente registrada sin crear una nueva. Mi mejor opción es que devuelva un código de estado 200 OK y use el encabezado Content-Location para indicar de dónde proviene el elemento, p.
HTTP 200 OK
Content-Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
¿Parecería razonable? No estoy del todo claro si la ubicación o la ubicación del contenido es más adecuada en el segundo caso.
Hmmm sí en realidad me gusta este. Aunque los números de serie pueden no ser únicos en el mundo, existe una probabilidad de casi el 100% de que sean únicos dentro del alcance de un usuario, por lo que podría actuar como un identificador único de ámbito. También resolvería mi problema de cómo un dispositivo puede verificar si ya está registrado usando un GET en esta URL y verificando si la respuesta es 200 o 404. ¡Gracias! –