Post Top Ad

Your Ad Spot

miércoles, 7 de octubre de 2020

Tutorial de Node.js Express Rest Api

 

Veamos cómo construir una API REST simple usando Express para permitir todas las operaciones CRUD. REST se refiere a la transferencia de estado representacional. Es una convención para construir servicios HTTP a través de una arquitectura de cliente y servidor. En REST, el protocolo HTTP se utiliza para facilitar la creación, lectura, actualización y eliminación de recursos en el servidor. Estas operaciones pueden denominarse colectivamente operaciones CRUD. Cada operación usa un verbo HTTP diferente. Crear utiliza una solicitud POST. Leer utiliza una solicitud GET. La actualización utiliza una solicitud PUT. Finalmente, Delete usa una solicitud DELETE. En este tutorial, crearemos todos estos servicios usando Node.js y Express .


Servidor Web Express

Ya hemos aprendido a montar un proyecto Express, así que sigamos adelante y creemos uno nuevo para que podamos construir nuestra nueva API REST. Ingrese los siguientes comandos para comenzar.

  • nodo $mkdir express-rest
  • nodo $cd express-rest
  • expreso-descanso $npm init --yes

demostración de descanso expreso

También necesitamos un archivo index.js en la raíz del proyecto, por lo que también podemos crearlo. Una vez que esté completo, agregue el siguiente código. Estamos solicitando el módulo express, y luego llamando a la función express () y asignando el resultado a la appconstante. El resultado es un objeto y, por convención, normalmente se denomina aplicación. Visual Studio Code nos informa lo siguiente sobre express (). “Crea una aplicación Express. La función express () es una función de nivel superior exportada por el módulo express ".

Podemos iniciar el servidor web escribiendo node index.jsen el símbolo del sistema.
escuchando en el puerto 3000

Ahora que el servidor se está ejecutando, podemos cargar http: // localhost: 3000 en el navegador para ver que todo está bien.
el servidor web está funcionando en el navegador

Ahora agregaremos una nueva ruta que simulará una API. Queremos poder visitar el punto final / api / games y ver todos los juegos en el sistema. En este punto, no tenemos una base de datos, por lo que solo completaremos una matriz simple como ejemplo.

Para probar esto, deberá reiniciar el servidor web en la línea de comando. Primero escriba CTRL-C para detener el servidor, luego vuelva a iniciar el servidor con node index.jsAhora, visite http: // localhost: 3000 / api / games en el navegador y eche un vistazo.
variedad de juegos obtener solicitud


Nodemon Express

A medida que avancemos, será tedioso reiniciar manualmente el servidor en cada actualización que hagamos. Podemos lidiar fácilmente con este problema haciendo uso de nodemon al iniciar el servidor. Es probable que Nodemon esté instalado si revisó nuestro tutorial de renderizado html con nodo . Si no está instalado, simplemente continúe y escriba npm i -g nodemonen la línea de comando. Una vez que esté listo, detenga el servidor y vuelva a iniciarlo usando nodemon index.js.
nodemon index-js

Ahora, cuando realice cambios en sus archivos como en la línea 5 aquí,

Ya no necesitará detener y luego reiniciar el servidor. Continúe y realice sus actualizaciones, y verá que la línea de comando refleja esto automáticamente.
Nodemon reiniciando debido a cambios

Por supuesto, el resultado en el navegador también se actualiza.
index js se actualizó


Configuración de puerto con una variable de entorno

Hasta ahora hemos estado codificando los valores para diferentes variables de aplicación, como el puerto de escucha. No querrás hacer eso una vez que construyas algo más grande que una aplicación tutorial. La forma más apropiada de manejar esto sería buscar una variable de entorno con el nombre de PORT, y si está configurado, usar ese valor. Si no está configurado, puede volver a un valor predeterminado razonable. Anote el nuevo código aquí.

Ahora, el puerto se puede configurar y leer desde la variable de entorno. Aquí, configuramos el puerto en 4000 en lugar del 3000 que estábamos usando. Tenga en cuenta que cuando reiniciamos nodemon, el servidor ahora está escuchando en el puerto 4000.
exportar nodo de puerto env


Parámetros de ruta expresa

Los
parámetros de ruta de parámetros únicos son de suma importancia. Al pasar los parámetros de ruta, un usuario puede especificar al servidor qué recurso desea obtener. Considere el siguiente código.

Lo que esto dice es que cada vez que se realiza una solicitud de obtención /api/games, cualquier cosa que venga después es un parámetro de ruta dinámica. Entonces, por ejemplo, si visitamos http: // localhost: 4000 / api / games / 25, entonces 25 es el parámetro de ruta. Para obtener esto en el código, puede usar req.params.id . Aquí visitamos http: // localhost: 4000 / api / games / donkeykong y notamos que simplemente mostramos el valor del parámetro de ruta en el navegador.
id de parámetros de ruta

Múltiples
parámetros Puede tener más de un parámetro de ruta en la URL. Considere este código.

Ahora, si visitamos http: // localhost: 4000 / api / games / mario / nintendo, aquí está el resultado que obtenemos.
múltiples rutas params express

Parámetros de consulta
También podemos acceder a los parámetros de consulta en la URL. Aquí actualizamos el código para permitir tanto los parámetros de ruta como los parámetros de consulta.

req consulta

Los parámetros de ruta se utilizan para los valores primarios y necesarios para trabajar con un recurso. Los parámetros de consulta, por otro lado, pueden considerarse de naturaleza más opcional.


Solicitudes HTTP GET

Ahora podemos configurar algunas solicitudes de obtención para obtener juegos del servidor. Esto corresponde a Read of crud in a rest api. Simplemente estamos usando una variedad de juegos, ya que nuevamente no hay una base de datos todavía. Así que configuremos una serie de juegos como los que vemos aquí.

Por lo general, en la convención RESTful, si realiza una solicitud de obtención a la API sin especificar parámetros de ruta, debe recuperar todos los recursos. Entonces, si visitamos / api / games, deberíamos ver todos los juegos. Este código aquí debería funcionar.

¡Se ve bien!
buscar todos los juegos obtener solicitud

Ahora queremos poder encontrar un juego específico solo usando un parámetro de ruta. Para esto, podemos usar la función de búsqueda.

¡Esto también está funcionando bien! Cuando proporcionamos el parámetro de ruta de 3, recuperamos el juego Donkey Kong .
búsqueda expresa por id


Solicitudes HTTP POST

Ahora necesitamos configurar el código que permitirá que nuestro servidor web responda a las solicitudes de publicación http. Esto corresponde a Create of crud in a rest api. Podemos usar una solicitud de publicación para agregar un nuevo juego al sistema. Anote el código adicional aquí.

Lo primero que notamos en el fragmento de arriba es app.use (express.json ()); línea. Esto especifica que estamos agregando una pieza de middleware a nuestra aplicación. La razón por la que necesitamos esto es porque necesitamos analizar la propiedad del título del cuerpo de la solicitud de publicación, req.body.title. Express necesita poder analizar los objetos json en el cuerpo de la solicitud, por lo que este middleware lo activa.

A continuación, vemos que estamos publicando en la colección, o en otras palabras, en / api / games. Este ejemplo es un truco ya que en realidad no estamos trabajando con una base de datos, pero transmite la idea. Es por eso que obtenemos la identificación usando games.length + 1. El título se analizará a partir del objeto json en la solicitud de publicación a través de req.body.title. Finalmente, simplemente introducimos el nuevo juego en nuestra matriz de juegos y luego enviamos el juego como una respuesta por convención.


Prueba de endpoints con Postman

La forma en que podemos probar el envío de una solicitud de publicación con un objeto json en el cuerpo de la solicitud es mediante el uso de carteroEspecificamos el tipo de solicitud como POST, proporcionamos la ruta para la colección de juegos en http: // localhost: 4000 / api / games y configuramos el objeto json para incluir un juego con un título de Splatoon.
solicitud de publicación de cartero

Una vez que hagamos clic en Enviar, deberíamos obtener una respuesta como la que vemos aquí con una nueva identificación de 4 y el título del juego Splatoon.
respuesta a la solicitud de publicación

¡Parece que todo funcionó perfectamente! Esto significa que si ahora hacemos una simple solicitud GET a esa misma colección api de api / games, entonces deberíamos ver 4 juegos en lugar de los 3 que teníamos originalmente y eso es exactamente lo que obtenemos.
obtener la solicitud a la API de colección


Validación de entrada de Joi

Al configurar una API, es importante asegurarse de validar cualquier dato que se envíe a la API. No puede confiar en ningún dato que un usuario u otra aplicación pueda estar enviando a su api. Una buena forma de configurar la validación de entrada cuando se usa express es con el popular paquete Joi¡Vamos a instalarlo con npm !
paquete de validación joi

Una vez que Joi esté instalado, solicítelo en el archivo como tal.

Ahora podemos actualizar la llamada app.post () de esta manera. Primero, definimos el esquema o las reglas de validación que necesitamos. Aquí simplemente decimos que el título debe tener al menos 2 caracteres. Luego, hacemos esa llamada al método validate () pasando el cuerpo de la solicitud y el esquema. A partir de ahí, simplemente verificamos si hay errores y, si hay alguno, los enviamos de vuelta como respuesta.

¡Excelente! Ahora, podemos enviar una solicitud incorrecta usando cartero una vez más y ver el resultado.
enviar una solicitud 400 incorrecta

La respuesta que recibimos es un error, ¡tal como esperábamos!


Solicitudes HTTP PUT

Para actualizar un recurso existente en el servidor, puede utilizar una solicitud PUT. Esto corresponde a la actualización de crud en una API de descanso. Veamos cómo configurar el código para manejar una solicitud PUT para que podamos actualizar un juego en la aplicación. Este es un poco más complicado. Revisemos los pasos que debemos completar primero.

  • Busque el juego en la aplicación
  • Si no se encuentra, devuelve un error 404
  • Validar los datos que se envían al servidor
  • Si esos datos no son válidos, envíe un error 400 solicitud incorrecta
  • Si todo sale bien, actualiza el juego
  • Envía el juego actualizado como respuesta

Esto se traduciría en algo como esto en nuestro código.

¡Probémoslo! Enviaremos una solicitud PUT al servidor especificando el id de 3 y pasando un objeto json en el cuerpo de la solicitud con un nuevo título para este juego. En este momento, el juego con el id de 3 es 'Donkey Kong'. Intentaremos cambiarlo a 'Cave Story'.
poner solicitud enviada para actualización

Recibimos una respuesta como la esperamos.
poner solicitud 200 ok

Finalmente, solo queremos hacer nuevamente una solicitud GET a la colección en nuestro navegador y el juego 3 ahora debería ser 'Cave Story'.
poner actualización exitosa


Solicitudes de eliminación HTTP

Finalmente, aprenderemos cómo implementar las operaciones Delete of crud en nuestra api rest. Podemos seguir una lógica similar a la actualización de un curso. Aquí está el código que podemos agregar.

Ahora, enviemos una solicitud DELETE en cartero para eliminar el juego con una identificación de 2.
cartero eliminar solicitud

Recuperamos el juego que fue eliminado como respuesta, que es lo que esperamos.
eliminar respuesta del cartero

Finalmente, una vez más hacemos una solicitud GET a la API para enumerar todos nuestros juegos. Podemos ver que ahora falta el juego 2. ¡Oh no! ¡Zelda no te vayas!
enumerando todos los juegos


Resumen del tutorial de Node.js Express Rest Api

En este tutorial, aprendimos todo sobre cómo configurar una API REST simple usando Node.js y Express juntos. Cubrimos los verbos principales para usar, como GET, POST, PUT y DELETE, así como todas las operaciones CRUD. Express hace que sea bastante fácil configurarlos con app.get (), app.post (), app.put () y app.delete (). Además, podemos usar Mongoose para CRUD.


Algunos puntos clave para recordar

  • REST define un conjunto de convenciones para crear servicios HTTP:
    • POST : para crear un recurso
    • OBTENER : leer un recurso
    • PUT : para actualizar un recurso
    • ELIMINAR : para eliminar un recurso
  • Puede utilizar Express para crear servidores web con Node.js.
  • Nodemon es una excelente manera de observar los cambios en los archivos y reiniciar automáticamente el proceso del nodo.
  • Las variables de entorno pueden almacenar varias configuraciones para una aplicación. Para leer una variable de entorno, use process.env .
  • Nunca confíe en los datos enviados por el cliente. Realice la validación de entrada usando Joi en su lugar.

Fragmentos útiles para Express y REST


No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas