¿Qué verbo HTTP debo usar para activar una acción en un servicio web REST?
Al considerar los detalles de un servicio REST, a menudo es útil considerar esta heurística: ¿cómo implementaría esto con un sitio web?
HTML solo puede describir de forma nativa las solicitudes GET y POST. Entonces podemos comenzar a buscar allí.
Es GET
apropiado? Para responder a esta pregunta, debemos pensar en los supuestos que los clientes y los componentes intermedios tienen permitido hacer GET
. La semántica de GET
son seguras
el cliente no solicita, y no espera, ningún cambio de estado en el servidor de origen como resultado de aplicar un método seguro a un recurso de destino. Del mismo modo, no se espera que el uso razonable de un método seguro cause ningún daño, pérdida de propiedad o carga inusual en el servidor de origen.
La implicación, por lo tanto, es que los clientes y los componentes intermedios tienen discreción para invocar una solicitud GET con la frecuencia necesaria para satisfacer sus propias preocupaciones. Las arañas pueden OBTENER recursos indiscriminadamente para actualizar sus índices. Los cachés pueden pretraerse. En una red poco confiable, los mensajes perdidos se pueden volver a consultar con la frecuencia necesaria para garantizar al menos una respuesta.
Se usará para recargar configuraciones, caché, etc.
Si se trata de algo costoso, tal vez no desee que los clientes emitan estas solicitudes a su propia discreción.
POST
, por otro lado, no tiene restricciones, esto reduce en gran medida las suposiciones que los clientes genéricos pueden hacer. No obtienes componentes que hacen solicitudes POST especulativas porque sería incorrecto hacerlo; nada en el estándar dice que está bien.
PUT
, PATCH
, DELETE
... estos son métodos inseguros con semántica más específicos que POST
; si son apropiados o no dependerá de su modelo de recursos.
Una idea importante a tener en cuenta es que los métodos HTTP pertenecen al dominio del documento (consulte la charla de Jim Webber de 2011 ), los efectos que está describiendo probablemente no formen parte del dominio del documento, sino que son efectos secundarios que se invocan cuando se cambian los documentos. . Eso le da mucha libertad en términos de cómo organizar sus documentos para realizar el trabajo.