Breve detalle sobre REST
Antes de empezar vamos a hablar de operaciones REST. Estas operaciones son el punto de entrada a nuestra aplicación y se pueden diferenciar dos claros elementos:
- Ruta hacia el recurso, lo que viene siendo la URL.
- Acción a realizar sobre el recurso, lo que viene siendo la operación HTTP o el verbo.
Ruta del recurso
La ruta del recurso nos indica entre otras cosas, el endpoint y su posible jerarquía sobre la que se va a realizar la operación. Debe tener una raíz de recurso y si se requiere navegar por el recursos, la jerarquía irá separada por barras. La URL nunca debería tener verbos o acciones solamente recursos, identificadores o atributos.
Por ejemplo en nuestro caso de Categorías
, serían correctas las siguientes rutas:
- /category
- /category/3
- /category/?name=Dados
Sin embargo, no serían del todo correctas las rutas:
- /getCategory
- /findCategories
- /saveCategory
- /category/save
A menudo, se integran datos identificadores o atributos de búsqueda dentro de la propia ruta. Podríamos definir la operación category/3
para referirse a la Categoría con ID = 3, o category/?name=Dados
para referirse a las categorías con nombre = Dados. A veces, estos datos también pueden ir como atributos en la URL o en el cuerpo de la petición, aunque se recomienda que siempre que sean identificadores vayan determinados en la propia URL.
Si el dominio categoría tuviera hijos o relaciones con algún otro dominio se podría añadir esas jerarquía a la URL. Por ejemplo podríamos tener category/3/child/2
para referirnos al hijo de ID = 2 que tiene la Categoría de ID = 3, y así sucesivamente.
Acción sobre el recurso
La acción sobre el recurso se determina mediante la operación o verbo HTTP que se utiliza en el endpoint. Los verbos más usados serían:
- GET. Cuando se quiere recuperar un recursos.
- POST. Cuando se quiere crear un recurso. Aunque a menudo se utiliza para realizar otras acciones de búsqueda o validación.
- PUT. Cuando se quiere actualizar o modificar un recurso. Aunque a menudo se utiliza una sola operación para crear o actualizar. En ese caso se utilizaría solamente
POST
. - DELETE. Cuando se quiere eliminar un recurso.
De esta forma tendríamos:
GET /category/3
. Realizaría un acceso para recuperar la categoría 3.POST o PUT /category/3
. Realizaría un acceso para crear o modificar la categoría 3. Los datos a modificar deberían ir en el body.DELETE /category/3
. Realizaría un acceso para borrar la categoría 3.GET /category/?name=Dados
. Realizaría un acceso para recuperar las categorías que tengan nombre = Dados.
Excepciones a la regla
A veces hay que ejecutar una operación que no es 'estandar' en cuanto a verbos HTTP. Para ese caso, deberemos clarificar en la URL la acción que se debe realizar y si vamos a enviar datos debería ser de tipo POST
mientras que si simplemente se requiere una contestación sin enviar datos será de tipo GET
. Por ejemplo POST /category/3/validate
realizaría un acceso para ejecutar una validación sobre los datos enviados en el body de la categoría 3.