Respuesta adecuada para una inserción REST: ¿nuevo registro completo o solo el valor de identificación del registro?

15

Estoy creando una API REST que permite inserciones (POST, no idempotentes) y actualizaciones (PUT, idempotentes) para agregar / actualizar la base de datos a nuestra aplicación.

Me pregunto si hay estándares o mejores prácticas con respecto a qué datos enviamos al cliente en la respuesta para una operación POST (inserción). Necesitamos enviar al menos un valor de ID de registro (por ejemplo, su nuevo registro es el registro # 1234).

¿Deberíamos responder con el objeto completo? (por ejemplo, esencialmente la misma respuesta que obtendrían de una solicitud "GET / object_type / 1234")

¿Deberíamos responder solo con el nuevo valor de ID? (por ejemplo, "{id: 1234}", lo que significa que si desean obtener el registro completo deben hacer una solicitud HTTP GET adicional para obtener el registro completo)

¿Un encabezado de redireccionamiento que los apunte a la URL del objeto completo?

Algo más por completo?

Keith Palmer Jr.
fuente
Estoy seguro de OOT sobre las mejores prácticas, pero para mí personalmente considero que probablemente acaba de devolver la ID de nueva creación exitosa si en otro caso -1 etc interesados en ver lo que otros dicen, aunque
dreza

Respuestas:

13

Bueno, en una interfaz REST, siguiendo HTTP siempre que sea posible, devolvería un 201 y un URI en el campo de encabezado Ubicación al Recurso recién creado. Esto es lo que dice las definiciones de código de estado :

10.2.2 201 Creado

La solicitud se ha cumplido y se ha creado un nuevo recurso. El recurso recién creado puede ser referenciado por los URI devueltos en la entidad de la respuesta, con el URI más específico para el recurso dado por un campo de encabezado de Ubicación. La respuesta DEBE incluir una entidad que contenga una lista de características de recursos y ubicaciones de las cuales el usuario o agente de usuario puede elegir la más apropiada. El formato de entidad se especifica por el tipo de medio dado en el campo de encabezado Tipo de contenido. El servidor de origen DEBE crear el recurso antes de devolver el código de estado 201. Si la acción no puede llevarse a cabo de inmediato, el servidor DEBE responder con la respuesta 202 (Aceptada) en su lugar.

Si algo salió mal, diría que no debe regresar -1como otros han dicho, sino simplemente un Código de error de cliente o servidor (4xx o 5xx). Por ejemplo, si a un usuario no se le permite crear algún recurso nuevo, simplemente devolvería un "401 no autorizado", nada más y nada menos.

Bruno Schäpper
fuente
¿Qué hay del cuerpo? vacío o todo el objeto recién creado en respuesta?
Desarrollador
Dos opciones comunes que conozco son 1) establecer el encabezado de ubicación donde se puede encontrar la nueva entidad o 2) incluir la nueva entidad en el cuerpo. Yo personalmente voy con este último por razones prácticas. Somtimes combinados para una sensación más resty;)
Bruno Schäpper