Una API web es básicamente un contrato entre dos programas: uno pide, otro responde. Las APIs modernas usan HTTP y JSON, pero pueden trabajar con XML, form-data, multipart y otros formatos. Lo importante es entender las piezas y cómo encajan para poder diseñar, probar o consumir una API correctamente.
/api/users, /posts/123.GET, POST, PUT, PATCH, DELETE.Content-Type, Accept, Authorization, etc.POST o PUT, típicamente JSON: {"name":"Ana"}.200, 201, 400, 401, 404, 500, etc.Los más usados y su semántica:
GET → pedir un recurso, no debe cambiar nada, idempotente.POST → crear o enviar datos que el servidor procesa, no idempotente en general.PUT → reemplazar un recurso entero, idempotente (mismo request varias veces, mismo resultado).PATCH → actualizar parcialmente, no siempre idempotente.DELETE → borrar un recurso. Normalmente idempotente.Content-Type: application/json → cuerpo en JSON.Content-Type: application/x-www-form-urlencoded → formularios clásicos.Content-Type: multipart/form-data → uploads de archivos.Accept → qué formatos acepta el cliente, ej Accept: application/json.GET /api/users/42 HTTP/1.1
Host: api.ejemplo.com
Accept: application/json
Authorization: Bearer eyJ...
RESPONSE 200 OK
Content-Type: application/json
{
"id": 42,
"name": "Ana",
"email": "ana@ejemplo.com"
}
Dos cosas distintas: autenticar = demostrar quién eres; autorizar = qué puedes hacer. Los métodos comunes:
Authorization: Bearer ....Los servidores deben devolver códigos claros, y mensajes con la mínima info necesaria:
2xx → éxito (200 OK, 201 Created).3xx → redirección.4xx → error del cliente (400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found).5xx → error en el servidor (500 Internal Server Error).CORS regula qué orígenes pueden hacer peticiones desde el navegador. Si un API no configura CORS correctamente, puede exponer datos a dominios no deseados. Cabeceras clave: Access-Control-Allow-Origin, Access-Control-Allow-Credentials, Access-Control-Allow-Methods.
Diseñar APIs pensando en idempotencia ayuda a evitar efectos no deseados. También es importante validar inputs, escapar datos y no confiar en la entrada del cliente sea cual sea el método.
Cuando una colección es grande, la API debe soportar paginación y filtros. Patrones comunes:
?page=2&per_page=50?limit=20&offset=40?status=active&sort=-created_atCabeceras como Cache-Control, ETag y Last-Modified ayudan a reducir carga. Para APIs públicas, usar CDNs y limitar tamaño de respuestas es clave.
Limitar peticiones por IP o por token evita abusos. Responder con 429 Too Many Requests y un header con el reset time es una práctica habitual.
Mantener versiones evita romper clientes: ejemplos comunes /v1/users o usar cabeceras Accept: application/vnd.ejemplo.v2+json.
REST es arquitectura basada en recursos y HTTP. HATEOAS añade enlaces en las respuestas para descubrir acciones. GraphQL es alternativa que permite pedir exactamente los campos que quieres en una sola petición, con sus pros y contras.
Crear un recurso (POST):
POST /api/users HTTP/1.1
Host: api.ejemplo.com
Content-Type: application/json
Authorization: Bearer eyJ...
{
"name": "Juan",
"email": "juan@ejemplo.com"
}
# Response
201 Created
Location: /api/users/101
Actualizar parcialmente (PATCH):
PATCH /api/users/101 HTTP/1.1
Content-Type: application/json
{ "email": "juan.nuevo@ejemplo.com" }
# Response
200 OK
{ "id":101, "name":"Juan", "email":"juan.nuevo@ejemplo.com" }
La API es el contrato entre clientes y servidor. Diseñarla bien implica pensar en métodos correctos, seguridad, control de acceso, documentación y rendimiento. Si lo montas pensando en escenarios reales, evitas sorpresas. Si consumes una API, revisa documentación, límites, formatos y comportamiento ante errores.