rest http

Actualice una colección completa de recursos de forma REST



http (3)

Tengo un URI REST para una lista de recursos, algo como:

http://foo.com/group/users

Cada uno de estos usuarios tiene un número de secuencia y quiero exponer una forma de renumerar esos valores para todos los usuarios de la colección y hacer que este cambio esté disponible para todos los que accedan a la lista. Dado que esta es una acción en la colección en su conjunto, no estoy seguro de cómo lograr esto.

Puedo imaginar una URL como http://foo.com/group/users?sequence=normalize pero ni un PUT ni un POST realmente tienen sentido para toda la lista, a menos que envíe toda la colección con los nuevos números como datos del mensaje .

¿Cómo puedo actualizar una colección completa como esta de una manera RESTful sin tener que reenviar todos los recursos actualizados en la colección?


Después del comentario del raffian sobre mi respuesta inicial, volví a trabajar mi respuesta para ser más RESTANTE ...

  • Usa el método PATCH

Este método generalmente está diseñado para actualizar parcialmente el estado de un recurso. En el caso de un recurso de lista, podríamos enviar una lista con solo los elementos para actualizar y los identificadores de los elementos en la lista. La siguiente solicitud sería:

PATCH /group/users [ { "id": "userId1", "sequence": "newSequenceNumber1" }, { "id": "userId2", "sequence": "newSequenceNumber2" }, (...) ]

  • Use el método POST en el recurso de la lista

Este método se usa comúnmente para agregar un elemento en la lista administrada por el recurso. Por lo tanto, si desea aprovecharlo para esta acción, tenemos que pasar dentro de la solicitud una pista sobre la acción a ejecutar. Tenemos la opción de agregar esto en un encabezado dedicado o dentro de la carga útil.

Con el enfoque de encabezado , tendrá algo así:

POST /group/users X-Action: renumbering [ { "id": "userId1", "sequence": "newSequenceNumber1" }, { "id": "userId2", "sequence": "newSequenceNumber2" }, (...) ]

Con el enfoque de carga útil , tendrá algo así:

POST /group/users { "action": "renumbering", "list": { [ { "id": "userId1", "sequence": "newSequenceNumber1" }, { "id": "userId2", "sequence": "newSequenceNumber2" }, (...) ] } }

Espero que te ayude, Thierry


Hablando semánticamente, el método HTTP PATCH es el camino correcto . Esto también se describe en la respuesta elegida actualmente .

PATCH /group/users [ { "id": "userId1", "sequence": "newSequenceNumber1" }, { "id": "userId2", "sequence": "newSequenceNumber2" }, ... ]

Sin embargo, el segundo método descrito en la respuesta elegida no es tranquilo, porque usted inventó nuevos verbos dentro de una solicitud POST. Esto es SOAP, no REST.


Puede usar PATCH y POST en los URI. Usaría PATCH si fuera tú. Es la mejor solución para actualizaciones masivas.