Node, Express y MongoDB: Crea un API REST en JavaScript server-side de forma rápida, sencilla y eficiente

Node, Express y MongoDB: Crea un API REST en JavaScript server-side de forma rápida, sencilla y eficiente

Índice

  1. Introducción
  2. Manos a la obra
  3. Conclusiones

Introducción

¿Quieres construir un API REST de forma rápida, sencilla y con un alto rendimiento? Esta es tu combinación: NodeJS, Express y MongoDB. En este tutorial aprenderás los conceptos básicos de estas tecnologías y frameworks, que te ayudarán a construir una arquitectura robusta para desarrollar un API REST sobre JavaScript en la parte servidora.

¿Por qué JavaScript? A medida que los motores JavaScript se han hecho más y más eficientes, especialmente desde la aparición del motor V8 desarrollado por Google y su compilador JIT a código nativo, JavaScript se ha convertido en una alternativa cada vez más extendida de la nueva generación de aplicaciones web, no sólo en la parte cliente sino en la parte servidora, gracias también a los motores JavaScript tipo RingoJS o NodeJS, basados respectivamente en las implementaciones de ECMAScript Rhino, de Mozilla y V8 de Google.

Manos a la obra

Para seguir este tutorial necesitas:

  • NodeJS: Es una plataforma basada en el runtime JavaScript de Google Chrome, sigue un modelo de entrada/salida orientado a eventos y no bloqueante, de ahí su eficiencia. La arquitectura de NodeJS consiste en un hilo principal sirviendo a todos los usuarios y una serie de hilos para realizar operaciones de entrada/salida de forma asíncrona, con lo que la conexión del cliente (o el hilo principal de ejecución) no está asociado a los hilos de entrada/salida, optimizando los recursos del sistema que lo alberga (NodeJS).
  • Express: Es un framework para construir aplicaciones web sobre NodeJS inspirado en el framework Sinatra de Ruby (Express).
  • Mongoose: Se trata de un ODM (Object Data Mapper) en JavaScript diseñado para aplicaciones que usen MongoDB sobre NodeJS. Posee un API intuitivo para definir los modelos de datos y el almacenamiento asíncrono (Mongoose ODM).
  • MongoDB: Es una base de datos opensource NoSQL, destaca por su alto rendimiento y escalabilidad. Es orientada a documentos de estilo JSON y posee características interesantes como el Auto-Sharding o alta disponibilidad y replicación entre otras (MongoDB).

Una vez instalado NodeJS y MongoDB (recomiendo usar una cliente con un interfaz gráfico para MongoDB), crearemos un directorio para el proyecto y en su raíz, el fichero package.json que definirá el paquete npm que crearemos para construir el proyecto. Dicho fichero contiene metadatos del propio proyecto, así como las dependencias con otras librerías:

Mediante esta definición, declaramos las dependencias con las librerías Express y Mongoose que usaremos para construir nuestro API REST. Una vez creado el fichero ejecutaremos el comando npm install en el mismo directorio donde tenemos el fichero package.json, instalándose de forma local los paquetes Express y Mongoose para NodeJS.

Con esto ya tenemos todo lo necesario para empezar nuestra aplicación. Comenzaremos creando en la raiz de nuestro proyecto el fichero app.js, que previamente hemos definido en el fichero package.json como el JavaScript principal a ejecutar por node. La base de datos que usaremos (en el ejemplo test_database) se creará en MongoDB una vez iniciemos la aplicación.

Ahora crearemos una definión del recurso que expondremos en nuestro API REST, en el ejemplo crearemos un esquema Person en el fichero models/person.js y lo exportaremos como un modelo Mongoose en NodeJS:

Nuestro modelo Person contiene dos atributos, nombre y apellido definidos en un esquema Mongoose.

Por último, necesitamos enlazar las operaciones sobre el recurso Person con los métodos HTTP. Esto lo haremos creando un router de Express en el fichero routes/router.js:

En este caso nuestro API tendrá tres operaciones sobre nuestro recurso Persona:

  • Creación de nueva persona: POST /person
  • Listado de personas: GET /person
  • Lista de persona por Id: GET/person/:id
Una vez creadas las operaciones, podremos iniciar nuestra aplicación, para ello levantaremos MongoDB y cargaremos el fichero app.js en NodeJS usando el comando node app.js. Nuestra aplicación levanta un servidor HTTP escuchando en el puerto 8080 y que ejecutará las operaciones según nuestro router recien creado.

Para probar nuestro API REST usaremos REST Console, un plugin de Chrome muy completo para depurar las llamadas al API.

Para crear una nueva Persona haremos una llamada POST /person con los siguientes datos:

Si la creación del nuevo recurso Persona ha ido bien obtendremos un código HTTP 200 OK:

Para consultar los recursos creados usaremos GET /person:

Esta consulta retornará una colección de personas, en este caso dos, con sus respectivos identificadores que usaremos en la siguiente consulta.

Para obtener un recurso por id haremos una llamada GET /person/:id. Por ejemplo: GET /person/509f7ea9b6ff443202000003

Obteniendo el recurso solicitado:

Si queremos consultar o realizar otras operaciones directamente en MongoDB sobre los recursos creados, podemos usar el shell usando el siguiente comando mongo localhost/test_database para después hacer, por ejemplo, una consulta a la coleccion de Persona creada:

Conclusiones

NodeJS, Express y MongoDB es una buena combinación para construir un API REST de forma sencilla, rápida y eficiente en un entorno escalable. La modularización del estándar CommonJS soportada por NodeJS permite construir código bien organizado. El framework Express nos facilita la tarea de construir un patrón MVC sobre NodeJS. MongoDB, mediante el ODM Mongoose, nos proporciona una forma muy intuitiva de almacenar y consultar los documentos JSON.