Así que nada nuevo aquí, solo estoy tratando de obtener alguna aclaración y parece que no puedo encontrar ninguna en otras publicaciones.
Estoy creando un nuevo recurso con calma, digamos:
/books (POST)
con un cuerpo:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Sé que debería devolver un 201 (Creado) con un encabezado de Ubicación del nuevo recurso:
Location: /books/12345
La pregunta que parece que no puedo responder por mí mismo es qué debería devolver el servidor en el cuerpo.
A menudo he hecho este tipo de respuesta:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
He hecho esto por un par de razones:
- He escrito api para marcos frontales como angularjs. En mi caso particular, estoy usando recursos angulares y a menudo necesito solo la identificación del recurso para ubicarlo. Si no devolvía la identificación en el cuerpo de la respuesta, tendría que analizarla fuera del encabezado de Ubicación.
- En una OBTENCIÓN de todos los libros, generalmente devuelvo el objeto completo, no solo la identificación. En este sentido, mi código de cliente no tiene que diferenciar de dónde obtener la identificación (encabezado o cuerpo de ubicación).
Ahora sé que estoy realmente en el área gris aquí, pero la mayoría de la gente dice que devolver todo el recurso es una 'mala' práctica. Pero, ¿qué pasa si el servidor cambia / agrega información al recurso? Definitivamente agrega la identificación, pero también podría agregar otras cosas como una marca de tiempo. En el caso de que no devuelva todo el recurso, ¿es realmente mejor hacer una POST, devolver la identificación y luego hacer que el cliente realice una OBTENCIÓN para obtener el nuevo recurso?