the restful practices patterns microsoft guidelines designing delete best design rest web-applications

design - practices - Forma RESTful de enviar comandos



restful api principles (3)

¿Cómo se envían "comandos" a un servidor RESTful?

Caso de uso: mi servidor almacena en caché cierta información para que no tenga que leer la base de datos cada vez que se solicita esa información. Necesito una forma de enviar un comando desde mi aplicación cliente para decirle al servidor que purgue el caché. ¿Usarías POST o PUT en alguna URL como "... / flush_cache"?

El "comando" no es realmente información que necesita "Transferencia de estado representacional", a menos que el estado que se transfiere sea el resultado del comando - "interruptor apagado", "caché se enjuaga", etc. Como regla general, ¿cómo funciona? REST enviar comandos al servidor?


En tu caso, ¿por qué no convertir el cache el recurso?

DELETE /cache

Cuando quieras vaciarlo.

POST /cache

cuando quieras crear uno nuevo

O combine los dos anteriores en lo siguiente:

DELETE /cache?autorecreate=true


Me he encontrado con una situación así en un proyecto anterior. Como REST está bien ... sobre recursos, no siempre está claro cómo tratar con cosas que son realmente RPC en la naturaleza.

Una manera fácil de evitar esto es considerarlo como la parte burocrática del descanso ; la solicitud puede ser un recurso en sí mismo:

1. "¿Desea activar un comando en mi servidor? Primero llene este formulario I90292 y envíenoslo":

POST /bureaucracy/command-request Content-Type: application/x-www-form-urlencoded Content-Length: ...

  1. "Ok, veremos qué podemos hacer. Su número de caso es 999"

    201 Creado (o 202 aceptado según el comentario de Kugel) Ubicación / burocracia / solicitud de comando / 999

  2. Y luego el cliente revisa regularmente

    GET / burocracia / solicitud de comando / 999

Con suerte, recibe una respuesta como la siguiente

200 OK <command-request> <number>999</number> ... <result>Success</result> </command-request>

Por supuesto, si el servicio burocrático tiene una excelente atención al cliente, le ofrecería al cliente que lo llame cuando lo haga si lo desea:
"¿Desea activar un comando en nuestro servidor? Rellene este formulario y envíenoslo. Tenga en cuenta que puede unir su información de contacto para que podamos llamarlo cuando esté listo"

POST /bureaucracy/command-request?callback=client.com/bureaucracy/inbox

O como un encabezado http personalizado X-Callback: http://client.com/bureaucracy/inbox


Sugeriría esto:

  • Cree un recurso que pueda OBTENER que le indicará al cliente cómo enviar el comando, similar a un formulario HTML, utilizando un POST si hay efectos secundarios en este comando.
  • POST al recurso para activar el comando y devolver el URI a un nuevo recurso que cree durante la ejecución de esta solicitud POST (por ejemplo, http://server.example/results/00001 ), quizás con un estado 204 (Sin contenido) y Encabezado de ubicación o redirección (dependiendo de qué cliente puede entender).
  • Permita que el cliente verifique los resultados en este recurso usando GET. También puede devolver la representación de este recurso (o algo similar) como la entidad devuelta por el POST justo antes.

Depende de usted decidir sobre el ciclo de vida del recurso resultante. Podría ser de corta duración si no necesita almacenar los resultados por mucho tiempo. El URI podría construirse a partir de un UUID, por ejemplo.