¡Ven a la JSConf España 2026! Comprar entradas

Métodos HTTP y cómo debe responder una API

Hasta ahora ya tenemos una API funcionando que discrimina rutas, pero hay un problema importante: está respondiendo igual a cualquier tipo de petición, independientemente del método HTTP utilizado.

En esta clase vamos a ver qué son los métodos HTTP, para qué sirve cada uno y cómo hacer que nuestra API responda correctamente según el “verbo” que reciba.

El problema actual

Si ahora mismo haces una petición a tu servidor, verás que responde lo mismo si haces un:

  • GET /usuarios
  • POST /usuarios
  • DELETE /usuarios

Esto es un problema serio porque:

  1. No tiene sentido semántico: No es lo mismo pedir datos que borrarlos.
  2. Convenciones HTTP: No estamos siguiendo el estándar que esperan otros desarrolladores.
  3. Inseguridad: Podríamos permitir acciones no deseadas (como borrar algo con un GET).

Regla de oro: Una API debe comportarse de forma distinta según el método usado para una misma URL.

Probar la API con clientes HTTP

Para detectar estos problemas es fundamental dejar de usar solo el navegador y empezar a usar un cliente de APIs. El navegador, por defecto, solo hace peticiones GET cuando escribes una URL.

Herramientas recomendadas:

Estas herramientas te permiten cambiar el método, añadir cabeceras, enviar cuerpos de mensaje (body) y analizar los códigos de estado de forma profesional.

Qué son los métodos HTTP

HTTP define distintos “verbos” que indican la intención de la petición. Los más importantes en el diseño de APIs REST son:

MétodoPropósito¿Es Idempotente?
GETRecuperar información de un recurso.
POSTCrear un nuevo recurso en el servidor.No
PUTActualizar un recurso existente (lo reemplaza por completo).
PATCHActualizar parcialmente un recurso.No
DELETEEliminar un recurso específico.
OPTIONSConsultar qué métodos están permitidos para una URL.

Controlar el método en Node.js

En Node.js nativo, podemos acceder al método HTTP directamente desde la propiedad req.method.

const server = http.createServer((req, res) => {
  const { method, url } = req

  if (url === '/usuarios') {
    if (method === 'GET') {
      // Lógica para devolver usuarios
      return res.end('Lista de usuarios')
    }

    if (method === 'POST') {
      // Lógica para crear un usuario
      res.statusCode = 201
      return res.end('Usuario creado')
    }

    // Si el método no es soportado para esta ruta
    res.statusCode = 405
    return res.end('Method Not Allowed')
  }
})

Responder con 405: Method Not Allowed

Cuando una ruta existe pero el método utilizado no está permitido (por ejemplo, intentar hacer un DELETE en la /home), la respuesta correcta es devolver un código 405. Esto le dice al cliente: “La URL está bien, pero no puedes usar ese verbo aquí”.

Códigos de estado HTTP (Status Codes)

No basta con devolver texto; los códigos de estado son el lenguaje universal de la web. Aquí tienes los más comunes que usarás en tus APIs:

  • 2xx (Éxito):
    • 200 OK: Petición correcta.
    • 201 Created: Recurso creado con éxito (típico de POST).
  • 4xx (Error del cliente):
    • 400 Bad Request: La petición está mal formada.
    • 401 Unauthorized: No tienes permiso (falta login).
    • 404 Not Found: El recurso o ruta no existe.
    • 405 Method Not Allowed: El método no está permitido.
  • 5xx (Error del servidor):
    • 500 Internal Server Error: Algo explotó en el servidor.

Recurso útil: Si te cuesta recordarlos, visita http.cat, donde explican cada código de estado con fotos de gatos. ¡Es infalible! 🐱

Conclusión

Controlar métodos y códigos de estado correctamente:

  • Hace tu API más profesional y predecible.
  • Facilita enormemente el trabajo a quien consume tu API (ya sea un frontend u otro backend).
  • Una API que responde siempre 200 OK no es una buena API.

En la siguiente clase empezaremos ya a construir una REST API real, aplicando todas estas convenciones desde el primer minuto.