Express (Parte II) — Peticiones HTTP (GET, PUT, POST, DELETE)

Mauricio Garcia
6 min readApr 28, 2022

--

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 de lectura.[ref]
  • POST—Se envía datos al servidor y crea una nueva entrada de datos, por lo que es de creació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 de actualización completa.[ref]
  • PATCH — Se envía solo los datos a cambiar al servidor y actualiza una entrada de datos, por lo que es de actualización parcial.[ref]
  • DELETE—Se utiliza para eliminar un recurso especificado por medio de un ID (URI), por lo que es de eliminación.[ref]

Importante: El método PATCH es muy similar al método PUT porque ambos modifican un recurso existente. La diferencia es que para PUT, el cuerpo de la solicitud contiene una nueva versión completa, mientas que para el PATCH, 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 solicitud GET, 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 respuesta res[ref] y la función next (función en el enrutador express, 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 y node 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 y node 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 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

--

--