¿Respuesta correcta para un inserto REST? ¿Nuevo registro completo o solo el valor de ID de registro?

14

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

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

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

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

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

¿Algo más enteramente?

    
pregunta Keith Palmer Jr. 24.10.2012 - 05:48

1 respuesta

12

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

  

10.2.2 201 Creados

     

La solicitud se ha cumplido y se ha generado un nuevo recurso.   creado. El nuevo recurso creado puede ser referenciado por el URI (s)   devuelto 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 contiene una lista de características de recursos y   ubicación (es) desde la cual el usuario o agente de usuario puede elegir la que más   apropiado. El formato de entidad está especificado por el tipo de medio dado en   el campo de encabezado Content-Type. El servidor de origen DEBE crear el   Recurso antes de devolver el código de estado 201. Si la acción no puede ser   llevado a cabo inmediatamente, el servidor DEBE responder con 202 (Aceptado)   respuesta en su lugar.

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

    
respondido por el Bruno Schäpper 24.10.2012 - 08:15

Lea otras preguntas en las etiquetas