Del inglés Application Programming Interface (Interfaz de programación de aplicaciones) Permite que diferentes aplicaciones se comuniquen entre sí.
Las API son intermediarios entre una aplicación / servicio y otro. Estas pueden estar dentro del mismo sistema o no.
Interfaz de Comunicación:
- Rutas (o endpoints) que las aplicaciones utilizan para interactuar con el sistema
- Cada una de estar rutas refiere a una acción en particular (Listar información, actualizar información, etc)
Seguridad y acceso:
- Las API suelen utilizar mecanismos de autenticación y autorización
- Estos se aplican a ciertos usuarios y aplicaciones
Instalación
Para completar el siguiente ejemplo debemos tener instalado:
- Node.js (olbigatorio)
- Postman
- MySQL
Aunque podemos conectarnos a múltiples bases de datos, yo voy a usar MySQL. Para el ejemplo que vamos trabajar en las siguientes publicaciones, vamos a crear un sistema con dos tablas: eventos y usuarios:
CREATE TABLE eventos (
id int(10) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
nombre varchar(50) DEFAULT NULL,
descripcion text DEFAULT NULL,
cupo tinyint(2) DEFAULT NULL,
fecha_creacion timestamp NULL DEFAULT NULL,
fecha_modificacion timestamp NULL DEFAULT NULL
) ENGINE=InnoDB;
CREATE TABLE usuarios (
id int(10) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
nombre varchar(50) DEFAULT NULL,
email varchar(50) DEFAULT NULL,
contrasena text DEFAULT NULL,
is_admin tinyint(1) UNSIGNED DEFAULT 0,
fecha_creacion timestamp NULL DEFAULT NULL,
fecha_modificacion timestamp NULL DEFAULT NULL
) ENGINE=InnoDB;
Crear proyecto Node.js
Elegimos un directorio en nuestro sistema en donde creamos nuestro proyecto. Por ejemplo en mi caso:
cd C:\javascript\api
Una vez dentro iniciamos proyecto escribiendo por consola:
npm init -y
(Va a crear el archivo package.json)
Dependencias
En el siguiente proyecto vamos a instalar las siguientes dependencias:
- express: Un framework web para Node.js que simplificará la creación de rutas y la gestión de solicitudes HTTP.
- body-parser: Un middleware que analiza los datos enviados en las solicitudes HTTP.
- mysql2: Dependencia para conectar a MySQL.
- bcrypt: Dependencia para el cifrado de contraseñas.
- jsonwebtoken: Dependencia para la gestión de tokens de autenticación.
Instalamos todo:
npm install express body-parser mysql2 bcrypt jsonwebtoken
Iniciando el servidor

Vamos a crear un archivo con el nombre app.js en la raíz de nuestro proyecto con el siguiente código:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 8888;
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
//Iniciamos el servidor.
app.listen(port, () => {
console.log('Servidor iniciado en: http://localhost:' + port);
});
Iniciamos el servidor:
node app.js
(Por consola)
Para detener el servidor y reiniciarlo debemos pulsar las teclas CTRL + C (Detener servidor) y luego volver a reiniciarlo con node app.js
Reiniciando el servidor automáticamente
Si hacemos un cambio en el archivo anterior, vamos a tener que reiniciar el servidor para que los cambios se apliquen.
Esta tarea termina siendo tediosa a la larga, por tanto una alternativa es la siguiente:
node --watch app.js
Esto último pudiera no funcionar, ya que sólo está disponible a partir de la versión 18.11.0 de Node.
En tal caso, una alternativa es usar nodemon.
Ruteador
Mediante el objeto express (app) podemos crear nuestras URL para ser accedidas desde un navegador y más tarde por otra aplicación:
app.get('/test', (req, res) => {
res.send('Hola, soy una URL de test');
});
Podemos probar su funcionamiento yendo a: http://localhost:8888/test
Request / Response
Los argumentos: req / res hacen referencia a dos objetos. El primero es la petición y el segundo la respuesta.
Por ejemplo podemos saludar al usuario con el nombre que vino por URL:
app.get('/test/:nombre', (req, res) => {
const {nombre} = req.params;
res.send(`Hola, ${nombre}`);
});
Podemos probar su funcionamiento yendo a:
http://localhost:8888/test/Juanita
Error 404
// Middleware para manejar el error 404
app.use((req, res, next) => {
res.status(404);
res.send(`
<h1>404 - Página no encontrada</h1>
<p>Lo sentimos, la página que estás buscando no existe.</p>
<a href="/">Volver a la página de inicio</a>
`);
});
Podemos probar el error 404 yendo a una URL que no hayamos definido. Por ejemplo:
http://localhost:8888/saraza
El código finalmente quedará así:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 8888;
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
//Iniciamos el servidor.
app.listen(port, () => {
console.log('Servidor iniciado en: http://localhost:' + port);
});
app.get('/test', (req, res) => {
res.send('Hola, soy una URL de test');
});
app.get('/test/:nombre', (req, res) => {
const {nombre} = req.params;
res.send(`Hola, ${nombre}`);
});
// Middleware para manejar el error 404
app.use((req, res, next) => {
res.status(404);
res.send(`
<h1>404 - Página no encontrada</h1>
<p>Lo sentimos, la página que estás buscando no existe.</p>
<a href="/">Volver a la página de inicio</a>
`);
});