Recuerde que con una API REST, todo se trata de su punto de vista.
Los dos conceptos clave en una API REST son los puntos finales y los recursos (entidades). En términos generales, un punto final devuelve recursos a través de GET o acepta recursos a través de POST y PUT y así sucesivamente (o una combinación de los anteriores).
Se acepta que con POST, los datos que envíe pueden o no resultar en la creación de un nuevo recurso y sus puntos finales asociados, que probablemente no "vivan" bajo la URL POSTed. En otras palabras, cuando PUBLICA, envía datos a algún lugar para su manejo. El punto final POST no es donde normalmente se puede encontrar el recurso.
Citando de RFC 2616 (con partes irrelevantes omitidas y partes relevantes resaltadas):
9.5 POST
El método POST se utiliza para solicitar que el servidor de origen acepte la entidad incluida en la solicitud como un nuevo subordinado del recurso identificado por el URI de solicitud en la línea de solicitud. POST está diseñado para permitir un método uniforme para cubrir las siguientes funciones:
- ...
- Proporcionar un bloque de datos, como el resultado de enviar un formulario, a un proceso de manejo de datos;
- ...
...
La acción realizada por el método POST podría no dar como resultado un recurso que pueda ser identificado por un URI . En este caso, 200 (OK) o 204 (Sin contenido) es el estado de respuesta apropiado, dependiendo de si la respuesta incluye o no una entidad que describa el resultado .
Si se ha creado un recurso en el servidor de origen, la respuesta DEBERÍA ser 201 (Creado) ...
Nos hemos acostumbrado a los puntos finales y los recursos que representan 'cosas' o 'datos', ya sea un usuario, un mensaje, un libro, cualquiera que sea el dominio del problema. Sin embargo, un punto final también puede exponer un recurso diferente, por ejemplo, resultados de búsqueda.
Considere el siguiente ejemplo:
GET /books?author=AUTHOR
POST /books
PUT /books/ID
DELETE /books/ID
Este es un CRUDO DE RESTO típico. Sin embargo, ¿qué pasa si agregamos:
POST /books/search
{
"keywords": "...",
"yearRange": {"from": 1945, "to": 2003},
"genre": "..."
}
No hay nada RESTful sobre este punto final. Acepta datos (entidad) en la forma del cuerpo de la solicitud. Esos datos son los criterios de búsqueda , un DTO como cualquier otro. Este punto final produce un recurso (entidad) en respuesta a la solicitud: Resultados de búsqueda . El recurso de resultados de búsqueda es temporal, se sirve inmediatamente al cliente, sin redireccionamiento y sin exponerse desde alguna otra URL canónica.
Todavía es REST, excepto que las entidades no son libros: la entidad de solicitud es el criterio de búsqueda de libros y la entidad de respuesta son los resultados de búsqueda de libros.