Cómo Crear una API con Node.js y Express

Crear un servicio de API con Node.js y Express es una tarea esencial y muy común en el desarrollo web. Este proceso permite integrar datos de servicios externos de manera eficiente en tus aplicaciones.

En esta guía, aprenderás paso a paso cómo construir una API desde cero utilizando Node.js y Express. Al finalizar, habrás creado tres endpoints funcionales para realizar operaciones clave: obtener, agregar y eliminar datos.

  Requisitos previos

  • Tener instalado Node.js y npm.
  • Conocimientos básicos de JavaScript.

Configuración del proyecto

1Crea una nueva carpeta para tu proyecto y ejecuta:
bash
mkdir crear-api
cd crear-api
npm init -y
1Instala Express:
bash
npm install express
3Crea el archivo principal:
bash
touch index.js
4Escribe la estructura básica del servidor en index.js:
javascript
const express = require('express');
const app = express();
const PORT = 3000;

app.use(express.json()); // Middleware para parsear JSON

app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});

1. Creando un Endpoint GET en Node.js y Express

1Añade un endpoint que devuelva una lista de elementos:
javascript
const items = [
 { id: 1, name: 'Item 1' },
 { id: 2, name: 'Item 2' }
];

app.get('/items', (req, res) => {
 res.json(items);
});
2Ejecuta el servidor:

Para iniciar el servidor, utiliza uno de los siguientes comandos:

bash
# Ejecuta el servidor una vez.
node index.js 

# Ejecuta el servidor y reinicia automáticamente al detectar cambios en el archivo index.js
node --watch index.js
3Prueba el endpoint

visita la url http://localhost:3000/items en tu navegador o usando herramientas como Postman.

2. Creando un Endpoint POST en Node.js y Express

1Añade un endpoint para agregar nuevos elementos:
javascript
app.post('/items', (req, res) => {
const { name } = req.body;

 if (!name) {
  return res.status(400).json({ message: "El campo 'name' es requerido." });
 }

 const newItem = req.body;
 newItem.id = items.length + 1;
 items.push(newItem);
 res.status(201).json(newItem);
});
2Prueba el endpoint enviando una solicitud POST con el siguiente cuerpo JSON:
json
{
   "name": "Item 3"
 }

Usa Postman o cualquier cliente HTTP para probarlo.


3. Creando un Endpoint DELETE en Node.js y Express

1Añade un endpoint para eliminar un elemento por su ID:
javascript
app.delete('/items/:id', (req, res) => {
 const itemId = parseInt(req.params.id);
 const itemIndex = items.findIndex(item => item.id === itemId);

 if (itemIndex >= 0) {
    items.splice(itemIndex, 1);
    res.status(204).send();
 } else {
    res.status(404).json({ message: 'Item no encontrado' });
 }
});
2Prueba el endpoint enviando una solicitud DELETE a una URL como esta:
bash
http://localhost:3000/items/1

Código completo

Código completo que muestra cómo crear una API REST básica usando Node.js y Express. Incluye endpoints para obtener, agregar y eliminar elementos, ideal para aprender lo esencial sobre servicios web.

javascript
const express = require("express");
const app = express();
const PORT = 3000;

app.use(express.json()); // Middleware para parsear JSON

const items = [
{ id: 1, name: "Item 1" },
{ id: 2, name: "Item 2" },
];

app.get("/items", (req, res) => {
res.json(items);
});

app.post("/items", (req, res) => {
const { name } = req.body;

if (!name) {
  return res.status(400).json({ message: "El campo 'name' es requerido." });
}

const newItem = req.body;
newItem.id = items.length + 1;
items.push(newItem);
res.status(201).json(newItem);
});


app.delete("/items/:id", (req, res) => {
const itemId = parseInt(req.params.id);
const itemIndex = items.findIndex((item) => item.id === itemId);

if (itemIndex >= 0) {
  items.splice(itemIndex, 1);
  res.status(204).send();
} else {
  res.status(404).json({ message: "Item no encontrado" });
}
});

app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});

Habilitar CORS en una API Node.js para permitir solicitudes externas


¿Qué es cors y por qué usarlo?

cors (Cross-Origin Resource Sharing) es un middleware que permite o restringe las solicitudes de recursos en función del origen del cliente. Esto es útil para habilitar la comunicación entre el servidor y clientes alojados en diferentes dominios. Para instalarlo, utiliza:

bash
npm install cors
javascript
const express = require("express");
const cors = require("cors"); // Importa cors
const app = express();
const PORT = 3000;

app.use(cors()); // Habilita CORS
app.use(express.json()); // Middleware para parsear JSON

const items = [
{ id: 1, name: "Item 1" },
{ id: 2, name: "Item 2" },
];

app.get("/items", (req, res) => {
res.json(items);
});

app.post("/items", (req, res) => {
const { name } = req.body;

if (!name) {
  return res.status(400).json({ message: "El campo 'name' es requerido." });
}

const newItem = req.body;
newItem.id = items.length + 1;
items.push(newItem);
res.status(201).json(newItem);
});

app.delete("/items/:id", (req, res) => {
const itemId = parseInt(req.params.id);
const itemIndex = items.findIndex((item) => item.id === itemId);

if (itemIndex >= 0) {
  items.splice(itemIndex, 1);
  res.status(204).send();
} else {
  res.status(404).json({ message: "Item no encontrado" });
}
});

app.listen(PORT, () => {
console.log(`Servidor corriendo en http://localhost:${PORT}`);
});

Recursos adicionales