Post Top Ad

Your Ad Spot

lunes, 29 de junio de 2020

Node.js Express Rest Api Tutorial

Veamos cómo construir una API REST simple usando Express para permitir todas las operaciones CRUD. REST se refiere a la transferencia de estado representativa. Es una convención para construir servicios HTTP a través de una arquitectura de cliente y servidor. En REST, el protocolo HTTP se usa para facilitar Crear, Leer, Actualizar y Eliminar 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 usa una solicitud PUT. Finalmente, Eliminar usa una solicitud DELETE. En este tutorial, crearemos todos estos servicios usando Node.js y Express .

Servidor web expreso

Ya hemos aprendido cómo desarrollar 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
  • descanso expreso $npm init --yes
demo de descanso expreso
También necesitamos un archivo index.js en la raíz del proyecto, para que podamos crearlo también. Una vez que esté completo, agregue el siguiente código. Estamos requiriendo 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, generalmente 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 funciona 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 rellenaremos 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 reinicie el servidor nuevamente con el nodo 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 avanzamos, será agotador reiniciar manualmente el servidor en cada actualización que realicemos. Podemos resolver fácilmente este problema haciendo uso de nodemon al iniciar el servidor. Es probable que Nodemon esté instalado si revisó nuestro html de representación con el tutorial de nodo . Si no está instalado, simplemente continúe y escriba npm i -g nodemonen la línea de comando. Una vez 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 tendrá que parar 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.
índice js se actualizó

Configuración de puerto con una variable de entorno

Hasta ahora hemos codificado 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 adecuada de manejar esto sería verificar una variable de entorno con el nombre de PORT, y si está configurado, use ese valor. Si no está configurado, puede recurrir a un valor predeterminado razonable. Tenga en cuenta el nuevo código aquí.
Ahora, el puerto se puede configurar y leer desde la variable de entorno. Aquí, configuramos el puerto a 4000 en lugar de los 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 la ruta de parámetros individuales 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 get /api/games, todo lo que viene 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 buscar esto en el código, puede usar req.params.id . Aquí visitamos http: // localhost: 4000 / api / games / donkeykong y observamos que simplemente mostramos el valor del parámetro de ruta en el navegador.
ID de parámetros de ruta

Parámetros múltiples Puede tener más de un parámetro de ruta en la url. Considera este código.
Ahora, si visitamos http: // localhost: 4000 / api / games / mario / nintendo, aquí está el resultado que obtenemos.
múltiples parámetros de ruta 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.
consulta requerida
Los parámetros de ruta se utilizan para 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 la lectura de crud en una api de descanso. Simplemente estamos usando una variedad de juegos, ya que nuevamente no hay una base de datos todavía. Así que configuremos una variedad 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 parámetros de ruta especificados, debería recuperar todos los recursos. Entonces, si visitamos / api / games, entonces deberíamos ver todos los juegos. Este código aquí debería hacer el truco.
¡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 .
expreso encontrar 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 la creación de crud en una API de descanso. Podemos usar una solicitud de publicación para agregar un nuevo juego al sistema. Tenga en cuenta 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 objetos json en el cuerpo de la solicitud para que este middleware lo active.
A continuación, vemos que estamos publicando en la colección, o en otras palabras, en / api / games. Este ejemplo es un poco pirata ya que en realidad no estamos trabajando con una base de datos, pero transmite la idea. Es por eso que estamos obteniendo la identificación usando games.length + 1. El título se analizará desde el objeto json en la solicitud de publicación a través de req.body.title. Finalmente, simplemente empujamos el nuevo juego a nuestra matriz de juegos y luego enviamos el juego como respuesta por convención.

Prueba de puntos finales con cartero

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 postman . Especificamos 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 correo cartero
Una vez que hagamos clic en Enviar, deberíamos recibir 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 posterior
¡Parece que todo funcionó a la perfección! Esto significa que si ahora simplificamos una solicitud GET a la misma api de colección 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 solicitud para la API de colección

Validación de entrada Joi

Al configurar una API, es importante asegurarse de validar los datos que se envían 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 manera de configurar la validación de entrada cuando se utiliza 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 así.
Ahora podemos actualizar la llamada a 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í, solo verificamos si hay errores y, si hay alguno, los enviamos de vuelta como respuesta.
¡Excelente! Ahora, podemos enviar una solicitud incorrecta utilizando el cartero una vez más y ver el resultado.
enviar solicitud incorrecta 400
La respuesta que recibimos es un error, ¡tal como esperábamos!

Solicitudes HTTP PUT

Para actualizar un recurso existente en el servidor, puede usar 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 solo un poco más complicado. Repasemos primero los pasos que debemos completar.
  • Busca 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, actualiza el juego
  • Enviar el juego actualizado como respuesta
Esto se traduciría en algo así en nuestro código.
¡Probémoslo! Enviaremos una solicitud PUT al servidor especificando la identificación 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 esperamos.
poner solicitud 200 ok
Finalmente, solo queremos volver a hacer 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 de HTTP

Finalmente, aprenderemos cómo implementar la eliminación de operaciones crud en nuestra API de descanso. 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.
solicitud de eliminación de cartero
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!
listado de 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 : para leer un recurso
    • PUT : para actualizar un recurso
    • BORRAR : para eliminar un recurso
  • Puede usar Express para construir 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íes en los datos enviados por el cliente. Realice la validación de entrada utilizando 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