blog/[Web]/primera-api-rest-nodejs-express-guia-completa
Servidores y conexiones de red representando una API
[Node.js]1 min de lectura

Cómo crear tu primera API REST con Node.js y Express

Guía completa para crear tu primera API REST: HTTP, rutas, controladores, validación, errores, CORS, variables de entorno, Postman y deploy mental model.

camilogaon

@camilogaon

27 de julio de 20263 vistas

Cómo crear tu primera API REST con Node.js y Express

Una API REST es el puente entre tu frontend y tus datos. Esta guía te construye una API de posts de blog paso a paso.

Stack: Node.js + Express + JS/TS mental model
Meta: entender rutas, status codes, validación y estructura


//1. HTTP en 5 minutos

MétodoUso
GETLeer
POSTCrear
PATCH/PUTActualizar
DELETEBorrar

Status útiles: 200, 201, 400, 401, 404, 500.


//2. Proyecto base

bash
mkdir blog-api && cd blog-api
npm init -y
npm i express cors dotenv
npm i -D nodemon

package.json:

json
{
  "scripts": {
    "dev": "nodemon src/index.js"
  }
}
js
// src/index.js
require("dotenv").config();
const express = require("express");
const cors = require("cors");

const app = express();
app.use(cors());
app.use(express.json());

app.get("/health", (_req, res) => {
  res.json({ ok: true });
});

const port = process.env.PORT || 3001;
app.listen(port, () => console.log(`API on :${port}`));

//3. Recurso posts (en memoria)

js
let posts = [
  { id: "1", title: "Hola API", excerpt: "Primer post", published: true },
];

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

app.get("/posts/:id", (req, res) => {
  const post = posts.find((p) => p.id === req.params.id);
  if (!post) return res.status(404).json({ message: "No encontrado" });
  res.json(post);
});

//4. Crear y validar

js
app.post("/posts", (req, res) => {
  const { title, excerpt } = req.body || {};
  if (!title || title.length < 3) {
    return res.status(400).json({ message: "title inválido" });
  }
  const post = {
    id: String(Date.now()),
    title,
    excerpt: excerpt || "",
    published: false,
  };
  posts.push(post);
  res.status(201).json(post);
});

//5. Update y delete

js
app.patch("/posts/:id", (req, res) => {
  const post = posts.find((p) => p.id === req.params.id);
  if (!post) return res.status(404).json({ message: "No encontrado" });
  Object.assign(post, req.body);
  res.json(post);
});

app.delete("/posts/:id", (req, res) => {
  const before = posts.length;
  posts = posts.filter((p) => p.id !== req.params.id);
  if (posts.length === before) {
    return res.status(404).json({ message: "No encontrado" });
  }
  res.status(204).end();
});

//6. Estructura que escala

text
src/
  index.js
  routes/posts.js
  controllers/postsController.js
  data/store.js

Separa rutas (wiring) de controladores (lógica). Después vendrá servicios + DB.


//7. Errores centralizados

js
app.use((err, _req, res, _next) => {
  console.error(err);
  res.status(500).json({ message: "Error interno" });
});

//8. Variables de entorno

.env

env
PORT=3001
CORS_ORIGIN=http://localhost:3000

Nunca subas .env a GitHub.


//9. Probar con Postman/curl

bash
curl http://localhost:3001/posts
curl -X POST http://localhost:3001/posts \
  -H "Content-Type: application/json" \
  -d "{\"title\":\"Mi post\",\"excerpt\":\"demo\"}"

//10. Siguiente nivel (camino Programemos)

  1. Persistir con Prisma + PostgreSQL
  2. Auth JWT
  3. Migrar mental model a NestJS (módulos/DTOs/guards)
  4. Paginación, filtros, SEO endpoints

//11. Checklist de API junior

  • CRUD completo
  • Validación de input
  • Status codes correctos
  • CORS configurado
  • README con endpoints
  • Ejemplos Postman/curl

//Conclusión

Si entiendes recursos, verbos HTTP y validación, ya construyes backends. Tu siguiente API: posts con DB real y auth.

FAQ

¿Qué es una API REST?

Un estilo de diseño donde el servidor expone recursos por HTTP (GET/POST/PATCH/DELETE) usando URLs y códigos de estado.

¿Express o NestJS para empezar?

Express es perfecto para aprender los fundamentos. NestJS aporta estructura cuando el proyecto crece (como en Programemos).

¿Necesito base de datos desde el día 1?

No. Empieza en memoria o JSON; luego conecta PostgreSQL/Prisma cuando el CRUD esté claro.

¿Qué es CORS?

Un mecanismo del navegador que restringe peticiones entre orígenes. Tu API debe permitir el frontend autorizado.

¿Cómo pruebo la API?

Con Postman, Insomnia, Thunder Client o curl. Luego automatiza con tests.