Express (Parte II) — Peticiones HTTP (GET, PUT, POST, DELETE)
Temario
- Métodos de solicitud HTTP
- Enrutando una solicitud HTTP
i. Introducción
En la story anterior [ref] lo que hicimos fue levantar el servidor de manera básica con nodejs y express, ademas de que definimos una ruta básica con el método get
[ref].
Es importante saber qué get
no, es el único método para enrutar una solicitud del cliente, así que en esta story vamos a revisar los otros métodos: post
[ref], put
[ref], delete
[ref], entre otros.
ii. Métodos de solicitud HTTP
HTTP define un conjunto de métodos de solicitud para indicar la acción deseada que se realizará para un recurso determinado[ref].
Básicamente son métodos de solicitud que pueden ser sustantivos o verbos HTTP, que nos van a servir para enviar y recuperar datos a un servidor.
Los verbos HTTP primarios o más utilizados son:
GET
— Se utiliza para recuperar datos del servidor y solo es delectura
.[ref]POST
—Se envía datos al servidor y crea una nueva entrada de datos, por lo que es decreación
.[ref]PUT
—Se envía una solicitud completa de datos al servidor con un ID específico (URI) dentro del cuerpo de la solicitud y actualiza una entrada de datos, por lo que es deactualización completa
.[ref]PATCH
— Se envía solo los datos a cambiar al servidor y actualiza una entrada de datos, por lo que es deactualización parcial
.[ref]DELETE
—Se utiliza para eliminar un recurso especificado por medio de un ID (URI), por lo que es deeliminación
.[ref]
Importante: El método
PATCH
es muy similar al métodoPUT
porque ambos modifican un recurso existente. La diferencia es que paraPUT
, el cuerpo de la solicitud contiene una nueva versión completa, mientas que para elPATCH
, el cuerpo de la solicitud solo necesita contener los cambios específicos.En resumen:
PUT
reemplaza todos los datos de un recurso,PATCH
aplica modificaciones parciales de un recurso.
Existen otros que no tan populares como:
OPTIONS
— Describe las opciones de comunicación para el recurso de destino.[ref]HEAD
—Solicita una respuesta idéntica a una solicitudGET
, pero sin el cuerpo de la respuesta. [ref]
En resumen:
iii. Enrutando una solicitud HTTP
El enrutamiento es determinar cómo una aplicación va a responder a una solicitud del cliente. Cada ruta puede tener uno o más métodos de controlador, que se ejecutan cuando la ruta y la solicitud
HTTP
coincide de manera secuencial.
La sintaxis general para crear un enrutamiento, es la siguiente:
La función de devolución de llamada o las funciones de middleware son aquellas funciones que tienen acceso al objeto de solicitud
req
[ref], el objeto de respuestares
[ref] y la funciónnext
(función en el enrutadorexpress
, cuando se invoca, ejecuta el middleware siguiente (si es que hay) al middleware actual.
Dentro de las funciones de middleware podemos realizar las siguientes tareas:
- Ejecutar cualquier código JS.
- Cambios en la solicitud y objetos de respuesta.
- Finalizar el ciclo de solicitud-respuesta
- Llamar al siguiente middleware de la pila.
Importante: Si la función NO finaliza el ciclo de solicitud-respuesta, se debe llamar la función
next
para pasar el control a la siguiente función de middleware; ya que de lo contrario la solicitud no mandará una respuesta, esto quiere decir, que del lado del cliente la petición quedará colgada.
Veamos con ejemplo todo lo explicado arriba…
:: Ejemplo 1
Dentro de la carpeta express
(que hemos creado previamente), vamos a crear la carpeta news-http-with-express
y dentro de la carpeta en consola ejecutamos:
Nota: Cuando les pida el nombre del archivo, no olviden poner
app.js
Ahora procedemos a instalar express
:
Creamos el archivo app.js
(que es el nombre que le dimos al archivo principal dentro de nuestra configuración dentro de package.json
), y agregamos lo siguiente:
Nota: Es importante familiarizarse con el código de arriba, ya que siempre va a ser la base de nuestro backend.
Agregamos una nueva ruta (líneas 6–9):
Donde:
- (A) — Cuando se hace la petición desde el navegador web a
"/about"
- (B) — El tipo de documento a regresar, en el caso del ejemplo, vamos a regresar un texto plano
text/plain
- (C) — Debe regresar
"Hello about!"
, donde estamos finalizando el ciclo de solicitud-respuesta
Importante: Siempre que hagas cambios, deberas reiniciar el servidor, con
Cmd+C (mac) o Ctrl+C (windows)
, para detener el servidor ynode app.js
para iniciarlo.
Si accedemos a la ruta http://localhost:3000/about, nos debe salir lo siguiente:
:: Ejemplo 2
Hagamos otro ejemplo con los métodos restantes:
No olvides: Siempre que hagas cambios, deberás de reiniciar el servidor, con
Cmd+C (mac) o Ctrl+C (windows)
, para detener el servidor ynode app.js
para iniciarlo.
Es importante tener muy bien relacionado los verbos con la ruta, ya que si se llega a invocar nos va a regresar un error, hagamos un cambio en la petición de PUT
por POST
:
Podemos observar en la animación que cuando hacemos la petición con POST
, nos arroja un HTML
de error, ya que esa petición HTTP
no la tenemos desarrollada, así que como buena práctica siempre hay que revisar el verbo con la petición.
:: Ejemplo 3
Podemos tener una misma ruta con diferentes peticiones HTTP
, veamos el siguiente ejemplo:
En el ejemplo de arriba se ha agregado la ruta /user
con los verbos GET, POST, DELETE
, ahora en postman agregamos las peticiones y probamos:
En la animación podemos observar que cuando hacemos la petición HTTP
de GET, POST, DELETE
sí nos retorna un valor, caso contrario a PUT
que nos regresa un error.
:: Ejemplo 4
La forma de hacerlo como el ejemplo anterior puede ser bastante propenso a tener errores ya que hay mucho código repetido:
Si observamos bien solo cambia el verbo y la función de middleware, para esto express nos proporciona el método app.route
[ref], que sirve para para encadenar dos o más respuestas, especificando una sola vez la ruta y con ello evitar redundancia y errores tipográficos.
El ejemplo de arriba quedaría de la siguiente forma:
Donde:
- (A) — Definimos solo una vez la ruta.
- (B) — Todos los métodos que va a aceptar esa ruta.
Hasta este punto has comprendido de manera básica los verbos HTTP, así como ejemplos muy básicos con express y por último pero no menos importante, como usar de manera muy básica el método app.route
En la siguiente entrega vamos a ver Express (Parte III) — Método app.use (sintaxis, errores, carga de archivos estáticos)
La entrega pasada vimos Express (Parte I) — Conceptos básicos y un hello world
Bibliografía y links que te puede interesar…
Iconos e imágenes…