query example http rest http-headers

example - Verbo HTTP MODIFICAR para REST?



soapui rest request properties (4)

Puede dividir el recurso en sub-recursos actualizables individualmente.

Por ejemplo, si tiene un recurso / usuario que representa la información de la cuenta de usuario, puede crear un sub-recurso / usuario / correo electrónico , luego haga un PUT en él para actualizar solo el correo electrónico.

Por lo que veo, no hay una forma RESTANTE de aplicar una modificación a un recurso. Para hacerlo, debes PONER el recurso como un todo, sobrescribiendo la representación anterior. Creo que esta es una fuente de problemas, en particular cuando el recurso tiene una gran representación.

Creo que esto insinúa la falta de un verbo en HTTP1.1: algo así como MODIFY o PATCH. Ni siquiera WebDAV tiene este verbo (tiene PROPPATCH, cuyo concepto es similar, pero no para los recursos).

¿No es el conjunto de verbos HTTP 1.1 actual demasiado limitado para el RESTO de mundo real?

Editar : Encontré una propuesta en IETF sobre el verbo PATCH

http://tools.ietf.org/html/draft-dusseault-http-patch-15

Esta especificación define el nuevo método HTTP / 1.1 [RFC2616] PATCH que se utiliza para aplicar modificaciones parciales a un recurso.

Se necesita un nuevo método para mejorar la interoperabilidad y prevenir errores. El método PUT ya está definido para sobreescribir un recurso con un nuevo cuerpo completo, y no puede reutilizarse para realizar cambios parciales. De lo contrario, los proxies y cachés e incluso los clientes y servidores pueden confundirse en cuanto al resultado de la operación. PATCH fue mencionado en las especificaciones HTTP anteriores, pero no completamente definido.

Por lo que veo, el único problema de tal verbo es la falta de idempotencia.

Editar: a partir de marzo de 2010, existe RFC 5789 ( método PATCH para HTTP ).


Puede usar POST para actualizaciones parciales. No es ideal, pero es bastante RESTful.


Hay buenas razones para que no haya tal verbo para hacer esto. Es casi imposible de administrar. Piense en cientos de clientes que modifican el mismo recurso de esta manera, ¿cómo sabe dónde termina su modificación? ¿Qué pasa si el orden importa, y su "parche" en realidad se agrega después de otro "parche" y ahora lo que quería agregar no es realmente lo que se agregó. Usar PUT con los encabezados de ETag es un enfoque mucho más sensato para modificar un recurso y luego tratar de cohibir un verbo nuevo con resultados desconocidos. Tener que OBTENER realmente el recurso es un pequeño precio a pagar por los resultados repetibles.


Ojalá hubiera verbos estandarizados y compatibles como ...

  • ENCONTRAR, BÚSQUEDA o CONSULTA: por lo tanto, es claro que la solicitud no es para un recurso, sino para la ubicación de otros recursos. Tal vez solo utilidad limitada.
  • MOVER, COPIAR, ENLACE - simplemente muy útil, actuarían de manera similar a las herramientas de línea de comando.
  • DESCUBRE, MAPA, ÍNDICE o MAPA DEL SITIO - para que pueda obtener un diseño de recursos, similar en concepto a un archivo wsdl, o system.listMethods de xmlrpc.
  • BEGIN, ACQUIRE o LOCK, y COMMIT, END, DONE o RELEASE: para dejar en claro cuándo se inician y finalizan las transacciones o si se utilizan recursos intermedios.
  • MODIFY, UPDATE, PATCH - porque todos lo queremos