update method explained example and resources rest service put

resources - method - rest post example



En caso de que una operaciĆ³n RESTful ''PUT'' devuelva algo (10)

Me preguntaba cuáles son las opiniones de la gente sobre una operación RESTful PUT que no devuelve nada (nulo) en el cuerpo de respuesta.


A diferencia de la mayoría de las respuestas aquí, realmente creo que PUT debería devolver el recurso actualizado (además del código HTTP, por supuesto).

La razón por la que querría devolver el recurso como una respuesta para la operación PUT es que cuando envía una representación de recursos al servidor, el servidor también puede aplicar algún procesamiento a este recurso, por lo que el cliente desea saber cómo funciona este recurso. parece que después de la solicitud se completó con éxito. (De lo contrario tendrá que emitir otra solicitud GET).


Creo que es posible que el servidor devuelva contenido en respuesta a un PUT. Si está utilizando un formato de envoltura de respuesta que permite la transferencia de datos (como el formato consumido por los datos de brasas), también puede incluir otros objetos que pueden haber sido modificados a través de activadores de base de datos, etc. # de solicitudes, y este parece ser un buen lugar para optimizar.)

Si acabo de aceptar el PUT y no tengo nada que informar, uso el código de estado 204 sin cuerpo. Si tengo algo que informar, uso el código de estado 200 e incluyo un cuerpo.


Del mismo modo que un cuerpo de Solicitud vacío está de acuerdo con el propósito original de una solicitud GET y el cuerpo de respuesta vacío está de acuerdo con el propósito original de una solicitud PUT.


El código de respuesta Http de 201 para "Creado" junto con un encabezado de "Ubicación" apunta a donde el cliente puede encontrar el recurso recién creado.


Hay una diferencia entre el encabezado y el cuerpo de una respuesta HTTP. PUT nunca debe devolver un cuerpo, pero debe devolver un código de respuesta en el encabezado. Solo elige 200 si fue exitoso, y 4xx si no. No hay tal cosa como un código de retorno nulo. ¿Por qué quieres hacer esto?


Idealmente devolvería una respuesta de éxito / fracaso.


La especificación HTTP / 1.1 (sección 9.6) describe los códigos de error / respuesta apropiados. Sin embargo, no aborda el contenido de la respuesta.

¿Qué esperarías? Un simple código de respuesta HTTP (200, etc.) me parece sencillo y sin ambigüedades.


La especificación HTTP ( RFC 2616 ) tiene una serie de recomendaciones que son aplicables. Aquí está mi interpretación:

  • Código de estado HTTP 200 OK para un PUT exitoso de una actualización a un recurso existente. No se necesita respuesta del cuerpo. (Según la Sección 9.6 , 204 No Content aún más apropiado).
  • Código de estado HTTP 201 Created para un PUT exitoso de un nuevo recurso, con el URI más específico para el nuevo recurso devuelto en el campo del encabezado de Ubicación y cualquier otro URI relevante y metadatos del recurso que se muestren en el cuerpo de la respuesta. ( RFC 2616 Sección 10.2.2 )
  • Código de estado HTTP 409 Conflict para un PUT que no tuvo éxito debido a una modificación de la tercera parte, con una lista de diferencias entre la actualización intentada y el recurso actual en el cuerpo de la respuesta. ( RFC 2616 Sección 10.4.10 )
  • Código de estado HTTP 400 Bad Request de un PUT fallido, con texto en lenguaje natural (como el inglés) en el cuerpo de la respuesta que explica por qué falló el PUT. ( RFC 2616 Sección 10.4 )

Utilicé la API RESTful en mis servicios, y aquí está mi opinión: Primero debemos llegar a una vista común: PUT se usa para actualizar un recurso que no se crea ni se obtiene.

Definí recursos con: Stateless resource y Stateful resource :

  • Recursos sin estado Para estos recursos, simplemente devuelva HttpCode con el cuerpo vacío, es suficiente.

  • Recursos de estado Por ejemplo: la versión del recurso. Para este tipo de recursos, debe proporcionar la versión cuando desee cambiarla, así que devuelva el recurso completo o devuelva la versión al cliente, de modo que el cliente no tenga que enviar una solicitud de obtención después de la acción de actualización.

Pero , para un servicio o sistema, mantenerlo simple , clearly , easy to use and maintain es lo más importante.


parece bien ... aunque creo que una indicación rudimentaria de éxito / fracaso / tiempo publicado / # bytes recibidos / etc. sería preferible

edición: estaba pensando en la integridad de los datos y / o el mantenimiento de registros; Los metadatos, como un hash MD5 o una marca de tiempo para el tiempo recibido, pueden ser útiles para archivos de datos grandes.