Header Ads Widget

Ticker

6/recent/ticker-posts

Construyendo una API RESTful usando Node.JS y MongoDB

 


Sin duda alguna, las interfaces de programación de aplicaciones o API juegan un papel muy importante en la comunicación y el intercambio de datos entre servidores y servicios. Desde computadoras hasta teléfonos inteligentes e Internet de las cosas (IoT), las aplicaciones hablan e intercambian información a través de API. Casi todos los días usamos o interactuamos con un servicio de API, y muchos sitios usan una API personalizada para ampliar su sitio web. Como tal, aprender a desarrollar una API personalizada agrega mucho valor a su perfil de desarrollador.

Motivados por la importancia de las API y la popularidad de JavaScript (JS), nos gustaría mostrarle cómo desarrollar una API RESTful personalizada utilizando Node.JS y MongoDB . En el camino, podrá aprovechar y mejorar sus habilidades de JS. Los desarrolladores también pueden expandir este tutorial usando MySQL en lugar de MongoDB o asegurando la API agregando devoluciones de llamada de autenticación.

Sobre el proyecto

Este tutorial requiere un conocimiento intermedio de JavaScript y Node.JS junto con un conocimiento básico de JSON, NPM, MongoDB (una base de datos sin SQL) y Express.JS. Este tutorial está orientado al desarrollo web back-end ya que no hablaremos de HTML, CSS o Angular. Haga clic aquí para descargar el archivo de proyecto .zip de este tutorial. Haga clic aquí para ver su demostración en vivo.

Descripción general del tutorial

En este tutorial, lo guiamos a través de siete pasos para desarrollar una API RESTFul utilizando marcos de JavaScript populares como Node.JS y Express.JS. Al hacerlo, aprendemos cómo integrar nuestra API con la base de datos MongoDB. Estos son los pasos principales:

1. Inicialización del proyecto
2. Instalar las dependencias de la aplicación
3. Ejecutar la aplicación
4. Probar la aplicación
5. Establecer conexión con MongoDB
6. Crear puntos finales de API REST
7. Poner todo junto

Algunos antecedentes sobre las API REST son útiles para comprender y seguir este tutorial.

Descripción general de la API RESTful

REST son las siglas de RE presentational S tate T ransfer. Cuando se llama a una API RESTful, el servidor transferirá al cliente una representación del estado del recurso solicitado. Por ejemplo, cuando un desarrollador llama a la API de OpenWeather para obtener el clima de una ciudad específica (el recurso), la API devolverá el estado de esa ciudad, incluida la temperatura, la humedad, la velocidad del viento, el pronóstico actual, el pronóstico extendido y más. La representación del estado puede estar en formato JSON y, en la mayoría de las API web, este es el caso. Otros posibles formatos de datos incluyen XML o HTML. Lo que hace el servidor cuando lo llama depende de dos cosas que debe proporcionar al servidor:
1. Un identificador del recurso. - Esta es la URL del recurso, también conocida como punto final . De hecho, URL son las siglas de Uniform Resource Locator.
2. La operación que desea que el servidor realice en ese recurso, en forma de método HTTP . Los métodos HTTP comunes son GET, POST, PUT y DELETE.

Prerrequisitos:

  1. Instale Node.js siguiendo las pautas adecuadas para su máquina local que se proporcionan aquí .
  2. Puede usar Node Version Manager para instalar múltiples versiones de Node.js en su máquina local.
  3. Regístrese en MongoDB Atlas, que es una base de datos en la nube como servicio. Estamos utilizando MongoDB Atlas, que nos ofrece un entorno de zona de pruebas gratuito para que podamos centrarnos en la creación de nuestra API REST.
  4. Editor de código como Visual Studio Code o Sublime Text

1. Inicialización del proyecto

Necesitamos crear una carpeta de aplicación donde residirá nuestra aplicación. Para inicializar la aplicación, necesitamos crear un archivo package.json , que contendrá todos los metadatos de la aplicación de nodo. El archivo permite que npm se encargue de instalar las dependencias del paquete y los scripts que escribimos para manejar la aplicación.
Suponiendo que tiene Node.js instalado, podemos inicializar la aplicación desde la línea de comando ejecutando lo siguiente:

npm init -y

El comando anterior creará un package.jsonarchivo.

2. Instalar dependencias de aplicaciones

Necesitamos un archivo que pueda actuar como central de comandos para nuestra aplicación. Este archivo se ejecutará primero npmcuando le pidamos que ejecute nuestra aplicación. Este archivo puede tener instancias de objetos de varios módulos que escribimos, así como módulos de terceros que instalamos desde el npmdirectorio.
Estos módulos son dependencias del proyecto. Instalaremos algunas de estas dependencias ahora:

touch app.js
npm install express mongodb body-parser --save

Usando los comandos anteriores creamos un archivo llamado app.jsque será el principal punto de entrada a la aplicación, e instalamos algunas dependencias que son esenciales para iniciar nuestra aplicación.
Estas dependencias son:
1. Express : este es un marco de Node.js.
2. MongoDB : este es un módulo oficial proporcionado por el equipo de MongoDB para ayudar a nuestra aplicación Node.js a comunicarse con MongoDB.
body-parser.: Este paquete nos permitirá manejar los cuerpos de las solicitudes con Express.

¿Por qué utilizar body-parser?

Digamos que está enviando datos de un formulario HTML al servidor Node.js, es decir, realizó una solicitud al servidor. HTTP envía los datos de su formulario en bits y piezas que están destinadas a ensamblarse a medida que llegan a su destino. Para extraer estos bits y piezas de datos y ensamblarlos de manera que estén en un formato que pueda ser útil, usamos un middleware de analizador corporal.

3. Ejecute la aplicación

Ejecutemos el código para nuestra aplicación -

const Express = require("express");
const BodyParser = require("body-parser"); const MongoClient = require("mongodb").MongoClient; const ObjectId = require("mongodb").ObjectID; var app = Express(); app.use(BodyParser.json()); app.use(BodyParser.urlencoded({ extended: true })); app.listen(5000, () => {});

Aquí, estamos importando nuestras dependencias descargadas. Inicializamos el marco expreso utilizando el objeto Express que usará el marco expreso para iniciar el servidor y ejecutar nuestra aplicación en un puerto dado y configurar el analizador corporal, que es un middleware para analizar fragmentos de datos entrantes.

4. Pruebe la aplicación

Podemos probar la aplicación ejecutando lo siguiente:

node app.js

El servidor estará escuchando en el puerto 5000 las solicitudes de acuerdo con el modelo anterior que escribimos.

5. Establecer conexión con MongoDB

Necesitaremos la cadena de conexión para MongoDB. Esto se puede encontrar en el panel de Atlas seleccionando Clústeres, luego la pestaña Descripción general seguida del botón Conectar.
Necesitamos agregar la cadena a nuestro app.jsy realizar los siguientes cambios en el código.

Nota al margen: en un mundo ideal, los desarrolladores se beneficiarán de agregarlo a un .envarchivo para mantener sus variables de entorno separadas de la aplicación.
const Express = require("express");
const BodyParser = require("body-parser");
const MongoClient = require("mongodb").MongoClient;
const ObjectId = require("mongodb").ObjectID;
const CONNECTION_URL = ;
const DATABASE_NAME = "accounting_department";


var app = Express();
app.use(BodyParser.json());
app.use(BodyParser.urlencoded({ extended: true }));
var database, collection;

app.listen(5000, () => {
    MongoClient.connect(CONNECTION_URL, { useNewUrlParser: true }, (error, client) => {
        if(error) {
            throw error;
        }
        database = client.db(DATABASE_NAME);
        collection = database.collection("personnel");
        console.log("Connected to `" + DATABASE_NAME + "`!");
    });
});

Aquí, hemos definido la cadena de conexión a usar. Debe agregar una CONNECTION_URLpropiedad de acuerdo con la cadena de conexión que recibió de MongoDB Atlas. También hemos definido el nombre de la base de datos que deseamos crear (si no está ya presente y colección).
Establecemos una conexión una vez que iniciamos nuevamente la aplicación y usamos variables definidas globalmente para que puedan ser utilizadas en cada uno de nuestros endpoints.

Ahora comencemos a diseñar nuestros puntos finales de API consumibles HTTP.

6. Cree puntos finales de la API REST

Ahora vamos a desarrollar puntos finales para crear y consultar los datos. Creemos un punto final para agregar los datos. Agregue el siguiente código a app.js:

app.post("/personnel", (request, response) => {
    collection.insert(request.body, (error, result) => {
        if(error) {
            return response.status(500).send(error);
        }
        response.send(result.result);
    });
});

No estamos haciendo ninguna validación de datos, pero cuando un cliente realiza una solicitud POST al /personnelpunto final, tomamos el cuerpo y lo insertamos en nuestra colección. Dependiendo de la respuesta de éxito o error de la base de datos, devolvemos la información al cliente.

7. Junte las cosas

Ahora, las cosas están empezando a encajar. Probemos nuestra aplicación.

curl -X POST \
-H 'content-type:application/json' \ -d '{"firstname":"John","lastname":"Doe"}' \ http://localhost:5000/personnel

Si no recibe ningún error, verá el registro de personal de John Doe agregado a la base de datos de MongoDB de accounting_departmenty bajo el personal de recolección. Siéntase libre de agregar más registros a su base de datos.

OBTENER

Ahora creemos un punto final para recuperar todos los datos de los registros. Agregue el siguiente código a app.js:

 app.get("/personnel", (request, response) => {
    collection.find({}).toArray((error, result) => {
        if(error) {
            return response.status(500).send(error);
        }
        response.send(result);
    });
});

El objetivo aquí es devolver todos los datos de nuestra colección que representan a las personas. No tenemos condiciones de consulta, de ahí el vacío {}en el comando de búsqueda y los resultados se convierten en una matriz.
Probemos esto usando cURL, una herramienta de línea de comandos para transferir datos y compatible con HTTP; una muy buena herramienta ad-hoc para probar servicios REST.

curl -X GET http://localhost:5000/personnel

OBTENER (por ID)

Supongamos ahora que ha agregado más registros a su base de datos. Los consumidores de API deberán recuperar un solo registro de acuerdo con su ID.

Escriba el siguiente punto final en su app.js:

app.get("/personnel/:id", (request, response) => {
    collection.findOne({ "_id": new ObjectId(request.params.id) }, (error, result) => {
        if(error) {
            return response.status(500).send(error);
        }
        response.send(result);
    });
});

Usaremos un parámetro de ruta para obtener información de personal específica de MongoDB. Los parámetros son opciones que puede pasar con el punto final (como especificar el formato de respuesta o la cantidad devuelta) para influir en la respuesta. Esta vez tenemos un parámetro de ruta llamado idque representará un ID de objeto en MongoDB. Usando el findOnemétodo, podemos obtener un solo registro en función de los criterios incluidos en el objeto. El id no es una cadena, por eso tenemos que usar el ObjectId.

Dependiendo de los datos reales en nuestra base de datos, podemos hacer un comando cURL similar a este:

curl -X GET http://localhost:5000/personnel/4b103f89403f841059524fd1

Conclusión

En este tutorial, hemos aprendido cómo desarrollar una API personalizada y conectarla con MongoDB para obtener y manipular los datos. Desde aquí, puede realizar diferentes pasos. Por ejemplo, puede expandir este proyecto agregando más funciones como la validación de datos. También puede mejorar la seguridad de la API y la posibilidad de venta siguiendo Node.JS mejores prácticas . Por último, puede probar este tutorial con la base de datos MySQL u otro lenguaje de codificación del lado del servidor como PHP o Django.
¿Qué opinas de este tutorial? ¿Qué herramientas está utilizando para desarrollar API REST?

Publicar un comentario

0 Comentarios