API
- Backend
- FastApi
- OpenAPI
- web services
- webhooks
- microservicios
- GraphQL
- XML
- JMeter
- axios
- ngrok
- SOAP
- Rest
- fetch
Concepto general
Una API (Application Programming Interface) define un conjunto de reglas que permiten la comunicación entre diferentes sistemas, aplicaciones o servicios. Es una capa de abstracción que facilita la interoperabilidad y desacopla los componentes.
Su diseño adecuado influye directamente en la escalabilidad, seguridad, rendimiento y mantenibilidad del sistema.
Tipos principales de APIs
- APIs locales: entre módulos o librerías dentro del mismo proceso o aplicación.
- APIs remotas: comunicación entre sistemas a través de red, generalmente sobre HTTP o gRPC.
- APIs abiertas (Open API / Public APIs): expuestas públicamente para que otros desarrolladores las utilicen.
- APIs privadas: usadas internamente dentro de una organización.
- APIs de partners: restringidas a socios o clientes específicos, con control de acceso.
Estilos y tecnologías
REST
- Basado en el protocolo HTTP y el concepto de transferencia de estado representacional.
- Cada recurso tiene un URI único y se accede mediante verbos HTTP (
GET,POST,PUT,DELETE,PATCH). - Se apoya en formatos ligeros como JSON.
- Escalable y fácil de cachear.
Buenas prácticas
- Versionar rutas (
/api/v1/...) - Usar respuestas consistentes con códigos HTTP adecuados.
- Incluir paginación, filtros y ordenamiento.
- Evitar sobrecargar endpoints.
SOAP
- Basado en XML y mensajería estructurada mediante el protocolo HTTP o SMTP.
- Enfocado en transacciones seguras y complejas (banca, seguros, etc.).
- Requiere un WSDL (Web Services Description Language) para describir los métodos disponibles.
- Más estricto y pesado que REST, pero más formal y estandarizado.
GraphQL
- Define un lenguaje de consultas que permite al cliente especificar exactamente qué datos necesita.
- Optimiza las llamadas, evitando overfetching y underfetching.
- Ideal para frontends modernos (React, Vue, etc.) y microservicios.
- Requiere un schema fuertemente tipado y un resolutor por cada campo o tipo.
FastApi
- Framework de Python moderno y asíncrono para construir APIs REST o híbridas.
- Integración nativa con OpenAPI y swagger para documentación automática.
- Soporta validación mediante
Pydanticy es altamente eficiente gracias aStarlette.
Documentación
OpenAPI y swagger
- Permiten describir, probar y documentar APIs REST de forma estandarizada.
- Swagger UI genera interfaces visuales para interactuar con los endpoints.
- OpenAPI define un formato JSON/YAML que describe rutas, modelos y respuestas.
Ejemplo básico de definición OpenAPI (YAML):
openapi: 3.0.0
info:
title: Sample API
version: 1.0.0
paths:
/users:
get:
summary: Get all users
responses:
'200':
description: List of users
`
Pruebas de APIs
JMeter
- Herramienta para pruebas de rendimiento, carga y estrés en servicios web.
- Permite crear escenarios concurrentes y analizar métricas de latencia, throughput y errores.
Clientes y testing local
axios
- Cliente HTTP basado en Promesas para JavaScript.
- Facilita las peticiones AJAX o RESTful desde frontend o Node.js.
- Soporta interceptores, cancelación de peticiones y configuración global de cabeceras.
Ejemplo básico:
axios.get('/api/users')
.then(response => console.log(response.data))
.catch(error => console.error(error));
fetch
- API nativa de JavaScript para realizar solicitudes HTTP.
- Basada en Promesas, más moderna que
XMLHttpRequest.
Ejemplo básico:
fetch('/api/users')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
ngrok
- Túnel seguro que expone servicios locales a Internet mediante una URL pública.
- Ideal para probar webhooks o APIs en desarrollo sin desplegarlas.
APIs y microservicios
- Cada microservicio suele exponer su propia API independiente.
- Comunicación entre ellos mediante REST, GraphQL, gRPC o colas de mensajes (RabbitMQ, Kafka).
- Es común usar API Gateways para unificar rutas, aplicar políticas de seguridad y manejar versiones.
web services
- Término general para describir servicios accesibles vía red.
- Incluye tanto REST como SOAP.
- Pueden implementarse en arquitecturas monolíticas, distribuidas o basadas en microservicios.
Consideraciones finales
- Aplicar seguridad con OAuth2, JWT o API Keys.
- Implementar rate limiting y monitorización.
- Usar versionado y documentación viva para mantener compatibilidad.
- Adoptar prácticas de observabilidad: logs estructurados, métricas y trazas distribuidas.
API Nuevos Conceptos y Temas Complementarios
Escalabilidad, rendimiento y estado
- Estado y “stateless”
- Un sistema que sigue los principios de Representational State Transfer (REST) debe ser stateless: cada petición del cliente al servidor debe contener toda la información necesaria para procesarla. :contentReference[oaicite:2]{index=2}
- Esto permite mejor escalabilidad horizontal, ya que cualquier nodo puede responder sin dependencias del estado de otros nodos.
- Cacheado y rendimiento
- En REST se puede aprovechar el caché HTTP (ETags, Cache-Control) para reducir la carga del servidor.
- En arquitecturas de microservicios opcionales, se deben considerar también colas, mensajería asíncrona o WebSockets para mejorar la tolerancia a fallos.
Modelo de madurez de las APIs
- Richardson Maturity Model (RMM) evalúa qué tan “RESTful” es una API según niveles de adopción de recursos, verbos HTTP, hipermedia. :contentReference[oaicite:4]{index=4}
- Nivel 0: todo pasa por un único endpoint (como RPC).
- Nivel 1: recursos con URIs distintas.
- Nivel 2: uso de verbos HTTP correctos.
- Nivel 3: hipermedia (HATEOAS) — enlaces dinámicos en las respuestas.
- Este modelo ayuda a diseñar y valorar APIs más maduras y flexibles.
Gestión y ciclo de vida de APIs
- API management engloba la administración del ciclo de vida de una API: diseño, publicación, versiones, seguridad, analítica. :contentReference[oaicite:6]{index=6}
- Componentes clave:
- Puerta de enlace de API (API Gateway) para autenticar, limitar peticiones, enrutar.
- Portal de desarrolladores y comunidad para que terceros descubran, prueben y usen tus APIs.
- Versionado de API: mantener compatibilidad retroactiva mientras avanzas con nuevas versiones (/v1, /v2, etc.).
- Métricas de uso: latencia, tasa de errores, volumen de datos, usuarios activos.
Seguridad, autenticación y autorización
- Autenticación: Verificar identidad (por ejemplo, mediante OAuth 2.0, JWT).
- Autorización: Determinar qué puede hacer ese usuario/cliente.
- TLS/HTTPS obligatorio para APIs públicas.
- Políticas de rate limiting y throttling para prevenir abuso.
- Sanitización de entradas, validación de esquemas, uso de CORS (cuando proceda).
Protocolos y formatos alternativos
- Más allá de REST, SOAP y GraphQL, hay otros enfoques:
- RPC con formatos binarios: gRPC + Protocol Buffers (alto rendimiento en microservicios internos).
- WebSockets para comunicación bidireccional contínua (chat, colaboración en tiempo real).
- HTTP/2 o HTTP/3 para mejorar multiplexado y latencia.
- Formatos de datos: JSON, XML, YAML, o binarios (Protocol Buffers, MessagePack).
Contratos de API, esquemas y generación de código
- Una especificación como OpenAPI Specification (OAS) describe rutas, parámetros, respuestas, esquemas de datos. :contentReference[oaicite:10]{index=10}
- Se puede generar automáticamente:
- Documentación interactiva (como Swagger UI) :contentReference[oaicite:12]{index=12}
- SDKs cliente en varios lenguajes.
- Validación de solicitudes/respuestas contra el contrato.
- Importante para lograr coherencia entre servidor, cliente y documentación.
Arquitecturas basadas en microservicios y APIs internas
- En una arquitectura de microservicios:
- Las APIs internas pueden comunicarse mediante REST, GraphQL, eventos o colas de mensajes.
- Se suele usar un API Gateway para exponer un “frente unificado” al exterior.
- Considerar desacoplamiento, tolerancia a fallos, fallbacks, circuit breaker (patrón de resiliencia).
- Importante gestionar la observabilidad: logs distribuidos, trazas (Distributed Tracing), métricas (latencia, fallo), alertas.
Versionado y compatibilidad
- Versionar tu API ayuda a evitar romper clientes cuando cambias la lógica.
- Estrategias: rutas (/v1), encabezados (Accept), parámetros de consulta (version=).
- Mantener backward‐compatibility siempre que sea posible: agregar campos nuevos opcionalmente, no eliminar existentes sin aviso.
Errores, respuestas y consistencia
- Respuestas consistentes: cuerpo estructurado de errores, códigos HTTP correctos (400, 401, 404, 500, etc).
- Ejemplo de estructura de error:
{
"error": {
"code": "INVALID_PARAMETER",
"message": "El parámetro ‘email’ debe ser válido",
"parameter": "email"
}
}
```
- Documentar claramente qué errores puede devolver tu API y en qué condiciones.
### Automatización, testing y CI/CD
- Automatizar tests de integración de APIs: asegurar que los endpoints funcionen como se espera.
- Integrar pruebas de rendimiento/carga (como con JMeter) para medir escalabilidad.
- Monitorear en producción: latencia, errores, uso de recursos, cumplimiento de SLA.
- Desplegar mediante pipelines de CI/CD: asegúrate de que al hacer una nueva versión se ejecuten tests, validación de contrato, rollback en caso de fallo.
### Tendencias y retos actuales
- APIs basadas en eventos (Event-driven). En lugar de solo peticiones, los servicios emiten eventos que otros consumen.
- API First design: definir el contrato (OpenAPI) antes de implementar.
- Integración con arquitectura serverless o funciones como servicio (FaaS).
- Documentación generada automáticamente, “docs as code”, esquemas versionados.
- Uso de Inteligencia Artificial para generar y mantener APIs/documentación.
- Retos de gobernanza: múltiples microservicios, gran número de APIs internas/expuestas, control de políticas, seguridad, costes.
## Resumen ampliado
Esta ampliación aborda aspectos que facilitan la creación, mantenimiento y operación de APIs en entornos reales y complejos: desde diseño avanzado, operación, escalabilidad, seguridad, hasta gobernanza y futuras direcciones. Añade un marco más completo para que la nota en Obsidian tenga también los “aspectos de producción” que muchas veces se pasan por alto.
# API — Extensión Avanzada
### API Gateway y patrones de integración
- **API Gateway**
- Es el punto de entrada único para todas las peticiones hacia los microservicios.
- Funciones clave: autenticación centralizada, limitación de tráfico, compresión, enrutamiento, logging, agregación de respuestas y control de versiones.
- Ejemplos: **Kong**, **NGINX**, **Traefik**, **Apigee**, **AWS API Gateway**, **Istio Ingress**.
- **Patrones comunes**
- *Backend for Frontend (BFF)*: API específica para un tipo de cliente (móvil, web, IoT).
- *API Composition*: combinar varias APIs internas en una sola respuesta externa.
- *Service Mesh*: delegar la comunicación entre microservicios a un plano de datos (Istio, Linkerd).
- *Circuit Breaker*: proteger de cascadas de errores mediante límites de reintentos o respuestas por defecto.
---
### Observabilidad y monitoreo
- **Logs estructurados**: emitir en formato JSON con campos estándar (`timestamp`, `service`, `trace_id`, `status`, etc.).
- **Métricas**: latencia, throughput, tasa de error, tamaño de payload, tiempos de respuesta por endpoint.
- **Trazas distribuidas**: con sistemas como **OpenTelemetry**, **Jaeger** o **Zipkin** para seguir peticiones entre microservicios.
- **Dashboards**: Prometheus + Grafana para visualizar métricas.
- **Alertas**: definir umbrales de rendimiento, errores 5xx o tiempos de respuesta elevados.
---
### Gobernanza y control de versiones
- **Catálogo de APIs**: repositorio central que lista todas las APIs disponibles, sus propietarios, versiones, esquemas y políticas.
- **Políticas de publicación**: definir quién puede exponer nuevas APIs o modificar existentes.
- **Control de acceso**: integración con IAM (Identity & Access Management).
- **Deprecación controlada**: anunciar cambios con tiempo, ofrecer periodo de coexistencia, automatizar eliminación de endpoints antiguos.
---
### Estrategias de diseño de contrato
- **Design-first (API First)**: escribir la especificación OpenAPI antes del código, validando el diseño con clientes internos.
- **Code-first**: generar la especificación a partir del código de los endpoints existentes.
- **Hybrid approach**: sincronizar contrato y código en pipelines automáticos.
- **Contratos como fuente de verdad**: centralizar validaciones, generación de SDKs y documentación a partir de un solo esquema.
---
### Testing avanzado de APIs
- **Tipos de pruebas**
- *Unitarias*: validan controladores y lógica interna.
- *Integración*: verifican dependencias con bases de datos o servicios externos.
- *Contract testing*: verifica que cliente y servidor cumplen el contrato (con herramientas como **Pact**).
- *Smoke testing*: comprobar que las rutas principales responden tras despliegue.
- *End-to-end*: flujo completo del usuario o consumidor.
- **Automatización**
- Integrar tests en CI/CD.
- Generar datos de prueba realistas.
- Analizar cobertura por endpoint.
---
### Seguridad avanzada
- **OAuth 2.0 / OpenID Connect**: autenticación y autorización delegada, tokens de acceso y refresh.
- **JWT (JSON Web Token)**: portadores de identidad firmados que permiten autenticación sin estado.
- **API Keys y scopes**: control de permisos granular.
- **HMAC / firmas**: verificación de integridad en webhooks.
- **CORS avanzado**: definir orígenes, métodos y cabeceras permitidos; evitar exposición excesiva.
- **Auditoría y trazabilidad**: registrar quién accede a qué endpoint y cuándo.
- **Rate-limiting dinámico**: basado en roles o planes de suscripción.
---
### APIs en tiempo real
- **WebSockets**: comunicación persistente full-duplex entre cliente y servidor.
- **Server-Sent Events (SSE)**: flujo unidireccional desde servidor hacia cliente.
- **gRPC streaming**: envío continuo de mensajes binarios de alto rendimiento.
- **MQTT / AMQP**: protocolos ligeros para IoT y mensajería en entornos distribuidos.
- **Webhook**: mecanismo de *push* basado en HTTP; útil para notificaciones, integraciones externas y eventos.
Ejemplo básico de webhook en Flask:
```python
from flask import Flask, request
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def receive_webhook():
data = request.json
print("Evento recibido:", data)
return '', 204
`
Versionado semántico y evolución
-
Versionado semántico (semver) aplicado a APIs:
- Cambios incompatibles → versión mayor (v2).
- Nuevas funcionalidades compatibles → menor (v1.1).
- Parches o correcciones → parche (v1.0.1).
-
Gestión de compatibilidad
- Feature flags para activar gradualmente nuevas versiones.
- Gateways que enrutan por versión.
- Documentación que indique diferencias por versión.
API Analytics y métricas de negocio
-
Analizar datos de consumo:
- Endpoints más usados, usuarios activos, tasa de error.
- Impacto en ingresos (para APIs comerciales).
- Correlacionar métricas técnicas con métricas de negocio: tiempo medio de respuesta vs retención de usuarios.
- Uso de herramientas de API Analytics: Kong Enterprise, Apigee, AWS CloudWatch, Elastic Stack.
APIs comerciales y monetización
-
Modelos de negocio
- Freemium: uso limitado gratuito, pago por volumen.
- Subscription: tarifa fija mensual o anual.
- Pay-per-use: cobro por llamada o recurso consumido.
-
Gestión de clientes
- Portales de desarrolladores con registro, documentación y claves de acceso.
- Paneles de facturación y cuotas.
-
Integración con pasarelas de pago y sistemas de facturación automáticos.
API Design Patterns
- Collection Pattern: recursos representados como colecciones y elementos (
/users→ lista,/users/{id}→ detalle). - Sub-resources: reflejar jerarquías (
/users/{id}/orders). - Batching: varias operaciones en una sola petición.
- Pagination:
limit,offset,nextCursor. - Filtering y sorting:
?status=active&sort=-date. - Partial update (PATCH): modificación parcial del recurso.
- Error-envelope pattern: estructura consistente de errores.
- Hypermedia links (HATEOAS): respuestas con enlaces a operaciones relacionadas.
API Documentation as Code
- Mantener la documentación junto al código fuente.
- Validación automática en cada commit (linting de OpenAPI).
- Generación de portales estáticos (ReDoc, Swagger UI, Docusaurus).
- Versionado de documentación en paralelo al código.
- Pruebas automatizadas que comparen ejemplos documentados con respuestas reales.
Seguridad de transporte y cifrado
- TLS obligatorio para todas las conexiones externas.
- Renovación y rotación automática de certificados (ACME, Let’s Encrypt).
- Validación mutua (mTLS) en entornos internos sensibles.
-
Protección frente a ataques comunes:
- Replay Attack: tokens de un solo uso o timestamps.
- Injection: validación estricta de entrada.
- Cross-Site Scripting (XSS) y CSRF: cabeceras seguras y tokens.
Integraciones híbridas y legacy
- Adaptadores (API Adapters) que exponen sistemas antiguos como REST/GraphQL.
- Uso de API Orchestration Layers para integrar múltiples backends dispares.
- API Facades: crear interfaces simplificadas sobre servicios complejos.
- Migración progresiva de SOAP a REST o GraphQL mediante gateways híbridos.
Futuro de las APIs
- Declarative APIs: definir comportamiento en YAML/JSON, ejecutado por plataformas sin servidor.
- Machine-Generated APIs: creación y actualización automática mediante IA.
- Zero-code / Low-code APIs: plataformas que permiten exponer datos sin escribir código.
- Interoperabilidad semántica: uso de vocabularios y esquemas compartidos (JSON-LD, Schema.org).
- API Contracts Validation at Runtime: validar en producción que las respuestas cumplen el contrato.
- Edge APIs: ejecución distribuida cerca del usuario (Cloudflare Workers, Vercel Edge).
Conclusión extendida
Esta ampliación cubre las capas de operación, gobierno, observabilidad, seguridad avanzada, monetización, diseño y tendencias futuras. Con ello, el documento ofrece una visión integral del ciclo de vida completo de una API moderna: diseño, implementación, despliegue, mantenimiento y evolución, con los principales patrones y tecnologías de referencia hasta 2025.
Diseño de Patrones y Protocolos API
- API
- Backend
- microservicios
- web services
- OpenAPI
- GraphQL
- Rest
- SOAP
- gRPC
- API Gateway
Introducción
El diseño de patrones y protocolos en una API define cómo se comunican los sistemas, cómo se estructuran los recursos y qué convenciones garantizan interoperabilidad y mantenibilidad.
Un buen diseño implica coherencia, previsibilidad, seguridad y escalabilidad a largo plazo.
Los patrones de diseño proporcionan soluciones comunes a problemas recurrentes en el desarrollo y operación de APIs, mientras que los protocolos definen las reglas técnicas de la comunicación.
1. Patrones de diseño de API
1.1. Patrones estructurales
- Resource Pattern
- Cada entidad se representa como un recurso con un identificador único (URI).
- Ejemplo:
/users,/users/{id},/orders/{orderId}. - Usado en REST y GraphQL (a nivel de tipo).
- Collection Pattern
- Agrupa recursos relacionados bajo una colección.
- Permite operaciones CRUD sobre conjuntos.
- Ejemplo:
GET /users→ listaPOST /users→ crearGET /users/{id}→ detalle
- Subresource Pattern
- Representa jerarquías o dependencias.
- Ejemplo:
/users/{id}/orders. - Evita exponer relaciones implícitas mediante consultas complejas.
- Envelope Pattern
- Uniforma respuestas dentro de un contenedor predecible.
- Ejemplo:
{
"status": "success",
"data": {...},
"errors": []
}
```
---
### 1.2. Patrones de comunicación
- **Request-Response**
- Clásico intercambio síncrono cliente-servidor.
- Base de REST, SOAP y gRPC unary.
- **Publish/Subscribe**
- Desacopla emisores y receptores mediante eventos.
- Usado en APIs de tipo *event-driven* o Webhooks.
- **Streaming**
- Envío continuo de datos (gRPC streaming, WebSockets, SSE).
- Ideal para tiempo real, monitoreo o IoT.
- **CQRS (Command Query Responsibility Segregation)**
- Separar comandos (modifican estado) de consultas (solo lectura).
- Reduce acoplamiento y mejora escalabilidad.
---
### 1.3. Patrones de versionado
- **URI versioning**
- `/api/v1/...`
- **Header versioning**
- `Accept: application/vnd.api+json; version=2`
- **Query versioning**
- `?version=3`
- **Backward compatibility**
- Evitar romper clientes; añadir campos nuevos sin eliminar antiguos.
---
### 1.4. Patrones de agregación y composición
- **API Composition**
- Combina respuestas de varios servicios en uno solo.
- Ejemplo: un endpoint `/dashboard` que une datos de `/users` y `/orders`.
- **Backend for Frontend (BFF)**
- API adaptada a un tipo de cliente (web, móvil, IoT).
- Mejora rendimiento y reduce lógica en el frontend.
- **GraphQL Pattern**
- Permite consultas personalizadas, combinando múltiples recursos en una sola llamada.
- Se basa en un esquema tipado que describe los datos disponibles.
---
### 1.5. Patrones de resiliencia
- **Circuit Breaker**
- Previene cascadas de fallos cortando llamadas a servicios no disponibles.
- **Retry Pattern**
- Reintenta peticiones fallidas con backoff exponencial.
- **Timeout Pattern**
- Define tiempos máximos de espera por respuesta.
- **Fallback Pattern**
- Usa una respuesta por defecto cuando un servicio falla.
---
### 1.6. Patrones de seguridad
- **Token-based Auth**
- Uso de JWT u OAuth 2.0 para autenticación sin estado.
- **Rate Limiting Pattern**
- Límite de peticiones por cliente o IP.
- **mTLS (Mutual TLS)**
- Autenticación mutua entre servicios internos.
- **Input Validation Pattern**
- Validación estricta en cada punto de entrada (schemas).
---
## 2. Protocolos de API
### 2.1. REST
- Protocolo basado en HTTP, ligero y ampliamente adoptado.
- Usa métodos estándar (`GET`, `POST`, `PUT`, `DELETE`, `PATCH`).
- Datos generalmente en formato JSON.
- Ventajas: simplicidad, cacheo, soporte universal.
- Desventajas: acoplamiento débil entre cliente y servidor, sobre/infra-fetching.
---
### 2.2. SOAP
- Basado en XML, formal y con contratos definidos mediante WSDL.
- Orientado a entornos corporativos o regulados.
- Permite transporte sobre HTTP, SMTP u otros protocolos.
- Soporta transacciones complejas y seguridad WS-*.
---
### 2.3. [GraphQL](/backend/graphql/)
- Permite al cliente definir la estructura exacta de la respuesta.
- Un solo endpoint (`/graphql`) maneja múltiples consultas y mutaciones.
- Ventajas: evita overfetching/underfetching.
- Desventajas: caching complejo y consultas costosas si no se limitan.
---
### 2.4. [gRPC](/backend/grpc/)
- Framework RPC basado en HTTP/2 y Protocol Buffers.
- Comunicación binaria, compacta y de alto rendimiento.
- Ideal para comunicación entre microservicios internos.
- Soporta streaming bidireccional.
Ejemplo básico de definición `.proto`:
```proto
syntax = "proto3";
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}
message UserRequest {
int32 id = 1;
}
message UserResponse {
string name = 1;
string email = 2;
}
`
2.5. WebSockets
- Protocolo full-duplex sobre TCP para comunicación en tiempo real.
- Mantiene una conexión abierta entre cliente y servidor.
- Ideal para chats, notificaciones y colaboración simultánea.
2.6. Server-Sent Events (SSE)
- Permite al servidor enviar flujos unidireccionales continuos al cliente.
- Útil para actualizaciones en vivo o dashboards.
2.7. MQTT y AMQP
- Protocolos ligeros para IoT y mensajería asincrónica.
- MQTT se basa en el modelo publish/subscribe.
- AMQP proporciona colas, enrutamiento y confirmación de entrega.
3. Patrones de interoperabilidad
-
HATEOAS (Hypermedia as the Engine of Application State)
- Incluye enlaces en las respuestas que describen las posibles acciones siguientes.
- Ejemplo:
{
"id": 1,
"name": "Eduardo",
"links": [
{"rel": "self", "href": "/users/1"},
{"rel": "orders", "href": "/users/1/orders"}
]
}
```
* **Content Negotiation**
* Cliente y servidor acuerdan el formato (JSON, XML, YAML) mediante encabezados `Accept` y `Content-Type`.
* **Idempotencia**
* Repetir una misma operación produce siempre el mismo resultado (importante para `PUT` y `DELETE`).
* **Statelessness**
* Cada solicitud contiene todo el contexto necesario, sin depender del estado del servidor.
---
## 4. Patrones de evolución y gobernanza
* **Deprecation Strategy**
* Notificar y documentar endpoints obsoletos.
* Mantener periodo de compatibilidad.
* **Schema Registry**
* Control central de los contratos y versiones de API.
* **API Linter / Validator**
* Analiza convenciones, consistencia y cumplimiento de estándares (por ejemplo, Spectral, OpenAPI Lint).
* **Observabilidad**
* Implementar trazas, logs estructurados y métricas por endpoint.
---
## 5. Comparativa de protocolos
| Protocolo | Transporte | Formato | Orientación | Rendimiento | Complejidad | Ideal para |
| ---------- | ---------- | ------------- | ----------- | ----------- | ----------- | --------------------------- |
| REST | HTTP/1.1 | JSON | Recursos | Medio | Baja | APIs públicas |
| SOAP | HTTP/SMTP | XML | Servicios | Medio | Alta | Entornos corporativos |
| GraphQL | HTTP | JSON | Consultas | Medio | Media | Frontends dinámicos |
| gRPC | HTTP/2 | Binario | RPC | Alta | Media | Microservicios internos |
| WebSockets | TCP | Texto/Binario | Eventos | Alta | Media | Tiempo real |
| MQTT | TCP | Binario | Pub/Sub | Muy alta | Baja | IoT |
| AMQP | TCP | Binario | Mensajería | Alta | Alta | Integraciones empresariales |
---
## Conclusión
El diseño de una API moderna requiere seleccionar **el protocolo adecuado** según el caso de uso, junto con **patrones de diseño** que garanticen robustez, mantenibilidad y compatibilidad futura.
REST y GraphQL dominan el panorama web, mientras que gRPC, WebSockets y MQTT amplían las posibilidades hacia entornos distribuidos, tiempo real y sistemas embebidos.
Adoptar patrones de versionado, resiliencia y seguridad permite construir APIs **predecibles, estables y escalables** en cualquier ecosistema.
# omnivore api
```base
type: list
name: "Notas con #api en Omnivore"
order:
- property: date_saved
direction: desc
columns:
- file.name
- date_saved
filters:
and:
- file.inFolder("Omnivore")
- file.hasTag("api", "API")
views:
- type: table
name: Table
sort:
- property: file.mtime
direction: DESC
¿Te gusta este contenido? Suscríbete vía RSS