¿Un lote de operaciones viola los principios de REST?

7

¿Viola los principios REST para que una API REST admita un lote de operaciones (tal vez con garantías transaccionales) que se pueden agregar a una cola a través de un POST?

Este diseño parece estar fuera del alcance de la arquitectura REST pero no necesariamente en violación de él, pero estoy buscando fuentes autorizadas aquí, y / o explicaciones de apoyo cuando / por qué evitar o preferir este enfoque.

Por ejemplo, la API Parse admite una POST para crear un lote de solicitudes, cada una representando lo que podría ser una solicitud de REST por separado, como la siguiente (cita):

curl -X POST \
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
        "requests": [
          {
            "method": "PUT",
            "path": "/1/classes/GameScore/Ed1nuqPvcm",
            "body": {
              "score": 999999
            }
          },
          {
            "method": "DELETE",
            "path": "/1/classes/GameScore/Cpl9lrueY5"
          }
        ]
      }' \
  https://api.parse.com/1/batch
    
pregunta Will 14.02.2014 - 22:02

1 respuesta

4

De lo que he leído esto no viola REST. REST tiene que ver con cómo el cliente y el servidor se comunican entre sí; esta comunicación debe ser sin estado, es decir, el cliente llama al servidor y el servidor responde, eso es todo, pero eso no significa que no haya estado involucrado. REST también se trata de poder abordar los recursos, y los recursos tienen estado / son.

Un ejemplo que leí (y me gustaría poder recordar dónde podría vincularlo) fue sobre transacciones: usted podría hacer un POST para crear un recurso de transacción, luego hacer una serie de PUT para modificar / actualizar esa transacción, luego finalmente haga una confirmación (olvido a qué verbo HTTP está asignado) para enviar la transacción. Todas estas comunicaciones fueron RESTful (no había estado de canal de comunicación) pero todavía había estado en / como recurso de transacción.

Agregar elementos a una cola de procesamiento en batch me parece que es similar al ejemplo de transacción.

No he hecho muchas cosas de REST, pero me parece bien.

Algunas lecturas un tanto relacionadas para las partes interesadas

    
respondido por el paul 14.02.2014 - 22:35

Lea otras preguntas en las etiquetas