En este tutorial, aprenderá cómo configurar una API RESTful completa, que atenderá las solicitudes HTTP utilizando Node.js y Express, mientras que el proxy inverso con NGINX, en Ubuntu 16.04 LTS. Utilizaremos una aplicación llamada Cartero, una herramienta de desarrollo de API muy conocida, para probar nuestra API y asegurarse de que sea completamente funcional y funcione correctamente. Node.js es un marco JavaScript multiplataforma rápido basado en el motor V8 de Chrome. Se utiliza tanto en aplicaciones de escritorio como de servidor y es famoso por su manejo de bucles de eventos de subproceso único. Utilizaremos Node.js como back-end para nuestra API RESTful, incluida con Express.js, nuestro marco de aplicaciones web creado para Node.js. Express.js se lanza como software libre y abierto. Express está del lado del servidor, escrito en JavaScript, y está diseñado para crear API, lo que lo hace perfecto para nuestro proyecto. Por otro lado, Postman es un cliente HTTP muy poderoso, con el desarrollo de API en mente. Cuenta con todas las herramientas que posiblemente pueda desear para el desarrollo de API.
Instalación de cartero
Primero, desea dirigirse al sitio web de Postman y descargar e instalar Postman para su PC principal (no su servidor). Todas las instrucciones de instalación estarán en su sitio web.
Instalando Node.js
Para comenzar, primero tendremos que instalar Node.js para que podamos comenzar a desarrollar nuestra API. Vamos a descargar e instalar Node.js desde el sitio web oficial.
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
Además, también querrá obtener las herramientas de compilación necesarias, que serán útiles para compilar módulos.
sudo apt-get install build-essential
Para este tutorial, utilizaremos la versión LTS de Node.js, que es la versión 8.9.3.
Inicializando nuestro proyecto Node.js
Tendremos que inicializar un nuevo proyecto Node.js, que contendrá una aplicación. Para hacer eso, cree un nuevo directorio.
mkdir expressapi
Cambiar al nuevo directorio. Una vez dentro, ejecuta npm init
y completa todas las indicaciones requeridas. Tenga en cuenta el "punto de entrada" de su aplicación: más adelante creará este archivo. Una vez que haya terminado, verá un package.json
archivo en su directorio actual. Actúa como una descripción de nuestro proyecto y enumera todas las dependencias necesarias para funcionar.
Configurando Express.js
Ahora configuraremos Express.js y sus dependencias.
npm install express
El proceso de instalación comenzará. Tomará unos minutos para que todo termine de descargarse.
Iniciando nuestro archivo principal
A continuación, crearemos nuestro archivo de inicio principal para nuestra API. Aquí es donde usará el "punto de entrada" que vio en el package.json
archivo. Por el bien de este tutorial, voy a utilizar el nombre predeterminado de esquema, index.js
.
touch index.js
Luego, ábralo en el editor de nano texto.
nano index.js
En nuestro archivo principal, primero queremos llamar a todos nuestros paquetes principales y registrar nuestras rutas.
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 8080;
const router = express.Router();
router.get('/', function(req, res) {
res.json({ message: 'API is Online!' });
});
app.use('/api', router);
app.listen(port);
console.log('Listening on port ' + port);
Básicamente, lo que estamos haciendo aquí es inicializar nuestra aplicación y configurar un enrutador básico para nuestra API. Tenga en cuenta que configuramos el puerto de nuestra aplicación en 8080
. Necesitaremos este número para cuando configuremos nuestra API RESTful. Ahora estamos listos para seguir adelante y probar nuestra API.
Probar nuestra API con Postman
En el directorio del proyecto, ejecute lo siguiente.
node <filename>.js
Esto iniciará la API, donde <filename>
está el archivo de inicio que especificó en el package.json
archivo. Luego, abra Postman en su PC / Mac y haga clic en el botón " New
" en la esquina superior derecha, luego haga clic en " Request
". Cuando esté allí, debería ver una barra que dice " GET
" al lado. Aquí ingresaremos nuestra URL de solicitud. Simplemente ingrese lo siguiente en la sección URL de solicitud y haga clic en " Send
".
`http://your-server-ip:3000/api`
Verás " 'API is online'
".
Rutas API
Para manejar rutas, utilizaremos el enrutador Express. Si no sabe qué es un enrutador, es esencialmente cómo responden los puntos finales de la aplicación a las solicitudes de los clientes. Estas son las rutas que estableceremos como ejemplo:
Ahora configuraremos nuestra primera estructura de middleware de ruta, así.
router.use(function(req, res, next) {
console.log('We've got something.');
next() //calls next middleware in the application.
});
router.route('/numbers/:number').get((req, res) => {
res.json({result: req.params.number + 1})
});
En este ejemplo, configuramos una situación en la que un usuario puede solicitar la suma de un número + 1 proporcionando la forma de la palabra, utilizando el método GET. Usamos la router.route()
función para señalar qué número queremos devolver como resultado. Los parámetros se nombran con un " :
" delante de ellos. Accedemos a estos parámetros a través de req.params
.
Aquí hay un ejemplo con letras.
router.route('/letters/:letter').get((req, res) => {
res.json({result: req.params.letter.toUpperCase()})
});
Utilizamos el mismo método que el anterior, pero enviamos la carta como mayúscula.
Introducción a NGINX
NGINX es un conocido software de código abierto utilizado para servicio web, servidores proxy inversos, transmisión y más. Utilizaremos NGINX para revertir el proxy de nuestra API, para permitirnos ejecutarlo en el puerto 80
, porque Node.js no permite conexiones en puertos inferiores a 1024 sin acceso a la raíz. Esto puede ser útil al vincular su dominio a su servidor.
Configurando NGINX
Para comenzar a instalar NGINX, deberá ejecutar lo siguiente en su terminal y esperar a que se complete la instalación.
sudo apt-get install nginx
A continuación, vamos a querer crear nuestro archivo de sitio que NGINX utilizará para revertir el proxy de nuestra aplicación.
sudo nano /etc/nginx/sites-available-api.js
Rellene el archivo con lo siguiente, luego CTRL+ Opara guardarlo.
server {
listen 80;
location / {
proxy_set_header X-Real-IP
$remote_addr;
proxy_set_header
X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header Host
$http_host;
proxy_set_header
X-NginX-Proxy true; proxy_pass
http://127.0.0.1:8080/;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade
$http_upgrade;
proxy_set_header Connection
"upgrade";
proxy_redirect off;
proxy_set_header
X-Forwarded-Proto $scheme;
}
}
Usando el mismo puerto en el que ejecutamos nuestra aplicación anteriormente, le estamos diciendo a Nginx que redirija todas las solicitudes desde nuestra dirección IP en el puerto 80
a nuestra API que se ejecuta en el puerto 8080
.
A continuación, habilite el proxy inverso al vincular nuestro archivo recién creado a la sites-available
carpeta:
sudo ln -s /etc/nginx/sites-available/api /etc/nginx/sites-available
Esto asegurará que NGINX revierta el proxy de nuestra API.
Primera ejecución con NGINX
Una vez que hayamos terminado nuestra configuración de NGINX, iniciaremos NGINX, luego iniciaremos nuestra API. Primero, reinicie NGINX.
sudo systemctl restart nginx
Luego, vuelva a cambiar a su directorio API e inícielo.
node <filename>.js
La aplicación se ejecutará en el puerto 80
. Simplemente ejecute la prueba desde arriba con Postman, para asegurarse de que todo funcione correctamente.
Manteniendo nuestra API funcionando
En un entorno de producción, debe asegurarse de tener un administrador de procesos para sus aplicaciones Node, para asegurarse de que se ejecuten para siempre en segundo plano. En este tutorial, utilizaremos un administrador de procesos llamado PM2 (Process Manager 2), que es un administrador de procesos para aplicaciones Node.js que los mantendrá vivos para siempre con un tiempo de inactividad mínimo. PM2 viene con muchas herramientas de administración útiles, como detener, recargar, pausar y más. Para instalar PM2, escriba lo siguiente y espere a que se instale.
sudo npm install pm2 -g
Una vez que está instalado, todo lo que tiene que hacer es asegurarse de estar en el directorio del proyecto, escriba lo siguiente y se iniciará la aplicación.
pm2 start <filename>.js
Administrando nuestra aplicación con PM2
Como se mencionó anteriormente, PM2 tiene algunas herramientas útiles que puede usar para administrar mejor su aplicación.
-
pm2 stop
- Como su nombre lo indica, esto le permite detener la aplicación actualmente en ejecución y eliminar su proceso. Si su aplicación está produciendo un resultado inesperado, entonces detenerlo será útil.
-
pm2 list
- La función de lista le permite ver todas las aplicaciones actualmente en ejecución a través de PM2, asignadas por sus nombres. Si necesita verificar rápidamente el tiempo de actividad de su aplicación, debe usar esta herramienta.
-
pm2 restart
- Si su aplicación se congela por alguna razón, y desea volver a cargarla, pm2 restart hace exactamente eso. Eliminará el proceso de solicitud y lo iniciará nuevamente, bajo un proceso diferente.
-
pm2 monit
- La herramienta de monitor incorporada de PM2 le permite ver un gráfico de los detalles específicos de su aplicación, como el uso de CPU / RAM, en un gráfico de estilo ncurses fácil de usar. Esto es útil si desea una imagen visual de la carga de su aplicación.
Ahora hemos completado nuestra tarea de crear una API RESTful, utilizando Node.js, Express y el proxy inverso con NGINX. Siéntase libre de ampliar este tutorial. Puede hacer muchas cosas excelentes con su nueva API, como agregar métodos de autenticación, una base de datos, una mejor ruta y manejo de errores, y mucho, mucho más. Si tiene un dominio, con un registro "A" ya configurado en su dirección IP, podrá acceder a su API desde su dominio. Si desea obtener más información sobre Express.js, visite su sitio web en http://expressjs.com . Para obtener más información sobre NGINX y el proxy inverso, visite http://nginx.com . Para leer más sobre PM2, visite su página en http://pm2.keymetrics.io .