Programming & Development

APIs & Microservices

Intermediate 7 modules 20 hours

Curso orientado a diseñar y consumir APIs HTTP con criterio tecnico, y a entender cuando una arquitectura de microservicios aporta valor y cuando solo añade complejidad. El enfoque cubre REST, contratos, versionado, seguridad, resiliencia, mensajeria y observabilidad.

Las APIs conectan aplicaciones, equipos y dominios de negocio. Un diseño pobre genera acoplamientos, integraciones fragiles y problemas de seguridad. Los microservicios, por su parte, no son un fin en si mismos: son una estrategia de particion arquitectonica que exige limites claros, autonomia, operacion distribuida y capacidad de observacion.

Modulo 01. HTTP, REST y principios de diseño de APIs

Objetivo del modulo

Comprender HTTP como protocolo base de las APIs web y aplicar principios REST para diseñar recursos, operaciones y respuestas con semantica consistente.

Resultados esperados

  • Diferenciar metodo HTTP, recurso, endpoint y representacion.
  • Elegir codigos de estado adecuados.
  • Diseñar rutas RESTful legibles.
  • Evitar errores frecuentes de semantica HTTP.

Desarrollo teorico

Toda API HTTP se apoya en el protocolo web. Antes de hablar de frameworks o microservicios hay que entender que una peticion HTTP tiene metodo, URI, cabeceras, cuerpo y semantica de respuesta. GET recupera representaciones, POST crea o desencadena procesamiento, PUT reemplaza, PATCH modifica parcialmente y DELETE elimina. No son simplemente verbos intercambiables; cada uno comunica intencion al cliente, a caches, proxies, herramientas y equipos humanos.

REST no es "usar JSON con HTTP". Es un estilo arquitectonico que enfatiza recursos identificables por URI, operaciones uniformes, ausencia de estado de sesion en el servidor para cada peticion y uso correcto del protocolo subyacente. En diseño cotidiano, esto suele traducirse a modelar bien los recursos: /users, /orders/123, /tickets/ABC-1/comments. Un anti-patron comun es usar rutas basadas en acciones para todo, como /createUser o /deleteServer, desperdiciando la semantica de HTTP.

Los codigos de estado tambien importan. 200 OK indica exito general; 201 Created es adecuado tras crear un recurso; 204 No Content encaja cuando la operacion fue correcta pero no devuelve cuerpo; 400 Bad Request refleja entrada invalida; 401 Unauthorized indica falta de autenticacion valida; 403 Forbidden significa que el cliente esta autenticado pero no tiene permiso; 404 Not Found expresa ausencia del recurso; 409 Conflict es util para colisiones de estado; 500 y familia indican problemas del lado servidor.

Metodo Uso principal Idempotencia Ejemplo
GET leer recurso si obtener ticket
POST crear o ejecutar operacion no necesariamente crear pedido
PUT reemplazo completo si actualizar perfil completo
PATCH cambio parcial depende del diseño cambiar estado
DELETE eliminar idealmente si borrar recurso

Diseñar bien una API significa tambien pensar en paginacion, filtrado, ordenacion y estructura de errores. Si /tickets puede devolver miles de elementos, necesita page, limit, cursores u otro mecanismo. Si la respuesta de error cambia en cada endpoint, el consumidor sufrira. Una API profesional debe ser predecible tanto en el camino feliz como cuando algo sale mal.

Ejemplo practico de API REST

Un diseño RESTful para un sistema de tickets ilustra las decisiones habituales:

# Listar tickets con filtros y paginacion
GET /api/v1/tickets?status=open&priority=high&page=1&limit=20
Accept: application/json
Authorization: Bearer eyJhbGci...

HTTP/1.1 200 OK
Content-Type: application/json

{
  "data": [
    {
      "id": "TK-1042",
      "title": "Error en SSO corporativo",
      "status": "open",
      "priority": "high",
      "assignee": null,
      "createdAt": "2026-03-15T10:30:00Z"
    }
  ],
  "total": 87,
  "page": 1,
  "pageSize": 20
}
# Crear un ticket
POST /api/v1/tickets
Content-Type: application/json
Authorization: Bearer eyJhbGci...

{
  "title": "VPN no conecta desde la oficina de Madrid",
  "description": "Desde esta mañana varios usuarios reportan timeout al conectar la VPN.",
  "priority": "high"
}

HTTP/1.1 201 Created
Location: /api/v1/tickets/TK-1043
Content-Type: application/json

{
  "data": {
    "id": "TK-1043",
    "title": "VPN no conecta desde la oficina de Madrid",
    "status": "open",
    "priority": "high",
    "createdAt": "2026-03-27T09:15:00Z"
  }
}
# Cambiar estado parcialmente
PATCH /api/v1/tickets/TK-1043
Content-Type: application/json

{ "status": "in_progress", "assignedTo": "agent-007" }

HTTP/1.1 200 OK
# Eliminar un ticket
DELETE /api/v1/tickets/TK-1043

HTTP/1.1 204 No Content

Estructura de errores consistente

Una API profesional devuelve errores con formato predecible. El consumidor no deberia adivinar donde esta el mensaje de error:

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Datos de entrada invalidos",
    "details": {
      "title": "Debe tener al menos 5 caracteres",
      "priority": "Valor no permitido. Opciones: low, medium, high, critical"
    },
    "requestId": "req-abc123"
  }
}

Paginacion con cursores frente a offset

La paginacion por offset (page=3&limit=20) es simple pero se degrada en tablas grandes. La paginacion por cursor es mas eficiente porque no necesita contar filas anteriores:

# Paginacion por cursor
GET /api/v1/tickets?limit=20&after=TK-1040

{
  "data": [...],
  "pagination": {
    "hasNext": true,
    "nextCursor": "TK-1060"
  }
}

El cursor suele ser el ID o timestamp del ultimo elemento. Es mas resistente a inserciones concurrentes que el offset, porque no se desplazan posiciones cuando se añaden nuevos registros.

Contenido ampliado

  • Cabeceras comunes como Content-Type, Accept y Authorization.
  • Idempotencia y seguridad de metodos.
  • Colecciones, subrecursos y acciones excepcionales.

Puntos clave

  • HTTP no es solo transporte; aporta semantica.
  • REST se apoya en recursos coherentes y operaciones uniformes.
  • Los codigos de estado comunican resultado funcional y tecnico.
  • Una API buena es predecible y consistente.

Checklist operativa

  • Verificar que cada ruta modela un recurso real.
  • Elegir metodo HTTP segun la intencion.
  • Devolver codigos de estado alineados con el resultado.
  • Diseñar respuestas de error consistentes.

Errores frecuentes

  • Usar POST para cualquier operacion.
  • Diseñar rutas basadas solo en verbos.
  • Responder 200 incluso cuando hay error funcional.
  • Ignorar paginacion en colecciones grandes.

Practica sugerida

Diseña una API de tickets con endpoints de listado, detalle, creacion, cambio de estado y comentarios, indicando metodos y codigos de estado esperados.

Preguntas de autoevaluacion

  • Por que 201 Created no equivale a 200 OK.
  • Cuando tiene sentido PATCH frente a PUT.
  • Que problema resuelve modelar recursos y no acciones arbitrarias.

Cierre

Una API madura empieza por respetar el protocolo que la sostiene; por eso HTTP y REST son la base de todo el curso.

Modulo 02. Contratos, recursos y versionado

Objetivo del modulo

Definir contratos estables entre proveedor y consumidor de API y aprender a evolucionarlos sin romper integraciones existentes.

Resultados esperados

  • Explicar que es un contrato de API.
  • Diseñar payloads y esquemas coherentes.
  • Aplicar estrategias basicas de versionado.
  • Entender compatibilidad hacia atras.

Desarrollo teorico

Un contrato de API es el acuerdo tecnico entre el servicio que expone capacidades y el consumidor que las utiliza. Incluye rutas, metodos, estructura de peticiones, respuestas, errores, headers, autenticacion y comportamiento esperado. Si el contrato cambia sin control, la integracion se rompe aunque el codigo del servicio "siga funcionando" para su propio equipo.

Versionar no significa añadir /v2/ por costumbre, sino planificar como evoluciona la interfaz. Cambios aditivos, como incorporar un campo opcional, suelen ser compatibles. En cambio, renombrar propiedades, cambiar tipos o eliminar valores puede romper clientes existentes. Por eso conviene distinguir cambios backward-compatible de breaking changes.

Especificacion OpenAPI

OpenAPI (antes Swagger) es el formato estandar para describir contratos de API REST. Define endpoints, parametros, esquemas de request/response y errores de forma legible por humanos y maquinas:

# openapi.yaml (fragmento)
openapi: "3.0.3"
info:
  title: API de Tickets
  version: "1.0.0"
paths:
  /tickets:
    get:
      summary: Listar tickets
      parameters:
        - name: status
          in: query
          schema:
            type: string
            enum: [open, in_progress, resolved, closed]
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
            maximum: 100
      responses:
        "200":
          description: Lista de tickets
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Ticket"
                  total:
                    type: integer
        "401":
          $ref: "#/components/responses/Unauthorized"

    post:
      summary: Crear ticket
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateTicketInput"
      responses:
        "201":
          description: Ticket creado
        "422":
          $ref: "#/components/responses/ValidationError"

components:
  schemas:
    Ticket:
      type: object
      required: [id, title, status, priority, createdAt]
      properties:
        id:
          type: string
          example: "TK-1042"
        title:
          type: string
        status:
          type: string
          enum: [open, in_progress, resolved, closed]
        priority:
          type: string
          enum: [low, medium, high, critical]
        assignee:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time

    CreateTicketInput:
      type: object
      required: [title, priority]
      properties:
        title:
          type: string
          minLength: 5
          maxLength: 300
        description:
          type: string
        priority:
          type: string
          enum: [low, medium, high, critical]

Con esta especificacion, herramientas como Swagger UI generan documentacion interactiva, y generadores de codigo pueden crear clientes tipados automaticamente.

Cambios compatibles frente a breaking changes

Entender que cambios rompen clientes y cuales no es fundamental para evolucionar la API:

Cambios compatibles (backward-compatible):
  - Añadir un campo opcional a la respuesta
  - Añadir un nuevo endpoint
  - Añadir un parametro de query opcional
  - Ampliar un enum con un nuevo valor (con precaucion)

Breaking changes:
  - Renombrar un campo existente (title -> ticketTitle)
  - Cambiar el tipo de un campo (id: number -> id: string)
  - Eliminar un campo de la respuesta
  - Cambiar un campo de opcional a obligatorio
  - Modificar la semantica de un codigo de estado

Estrategias de versionado

Las tres estrategias principales para versionar APIs tienen trade-offs distintos:

# 1. Version en la URL (la mas comun)
GET /api/v1/tickets
GET /api/v2/tickets

# 2. Version en cabecera
GET /api/tickets
Accept: application/vnd.myapp.v2+json

# 3. Version en parametro de query
GET /api/tickets?version=2

La version en URL es la mas visible y facil de implementar. La version en cabecera es mas "RESTful" pero menos practica para debugging y documentacion. En la mayoria de APIs publicas o internas, la version en URL es la eleccion mas pragmatica.

Deprecacion y comunicacion

Cuando una version o endpoint debe retirarse, la deprecacion necesita plazos claros y mecanismos de aviso:

// Middleware de deprecacion
function deprecationWarning(message: string, sunsetDate: string) {
  return (req: Request, res: Response, next: NextFunction) => {
    res.setHeader('Deprecation', 'true');
    res.setHeader('Sunset', sunsetDate);
    res.setHeader('Link', '</api/v2/tickets>; rel="successor-version"');
    console.warn(`[DEPRECATED] ${req.method} ${req.path} - ${message}`);
    next();
  };
}

// Uso en rutas v1
router.get('/api/v1/tickets',
  deprecationWarning('Usa /api/v2/tickets', '2026-09-01T00:00:00Z'),
  ticketHandler,
);

Las cabeceras Deprecation y Sunset son estandares que los consumidores pueden detectar automaticamente. La cabecera Link con rel="successor-version" indica donde esta la nueva version.

Contenido ampliado

  • OpenAPI como formato de descripcion.
  • Versionado en URL, cabecera o media type.
  • Estrategias de deprecacion y comunicacion.

Puntos clave

  • Un contrato bien definido reduce malentendidos y retrabajo.
  • No todo cambio exige nueva version, pero hay que evaluar compatibilidad.
  • Documentar solo despues de implementar no basta; el contrato debe formar parte del diseño.
  • La deprecacion necesita plazos y comunicacion.

Checklist operativa

  • Describir requests, responses y errores de forma explicita.
  • Marcar campos obligatorios y opcionales con claridad.
  • Revisar si un cambio rompe consumidores existentes.
  • Publicar ejemplos realistas de payloads.

Errores frecuentes

  • Cambiar nombres o tipos sin control de version.
  • Documentar respuestas parciales o inconsistentes.
  • Considerar versionado solo cuando ya hay una crisis de integracion.
  • No planificar deprecaciones.

Practica sugerida

Especifica un contrato OpenAPI simplificado para una API de usuarios y analiza que cambios serian compatibles o incompatibles con clientes existentes.

Preguntas de autoevaluacion

  • Que define realmente un contrato de API.
  • Cuando un cambio obliga a nueva version.
  • Por que un campo opcional no impacta igual que uno renombrado.

Cierre

El contrato es el lenguaje compartido entre sistemas; cuidarlo es cuidar la integracion completa.

Register for free to access the remaining 5 modules, exams and certificates.

Create free account

Learning outcomes

  • Explicar HTTP, REST y operaciones CRUD con precision.
  • Diseñar rutas, recursos y contratos de API mantenibles.
  • Aplicar autenticacion, autorizacion y controles de seguridad basicos.
  • Entender limites de dominio y responsabilidades en microservicios.
  • Comparar sincronia, mensajeria y patrones de resiliencia.
  • Operar servicios distribuidos con logs, metricas y trazas.

Target audience

- Desarrolladores junior o intermedios que trabajan con integraciones. - Perfiles backend, plataforma o arquitectura que necesiten una base ordenada. - Profesionales que consumen APIs y quieren entender mejor como se diseñan.

Prerequisites

- Conocer fundamentos de programacion y manejo de HTTP a nivel basico. - Haber trabajado o al menos practicado con JavaScript, Python u otro lenguaje de backend. - Interes por integracion, backend y arquitectura de servicios.

Study guide

Guia de estudio - APIs y Microservicios

Ritmo sugerido

  • Estudiar 1 modulo por sesion, prestando atencion a definiciones, comparativas y errores frecuentes.
  • Tomar notas propias y resumir cada modulo en 5-10 ideas accionables.
  • Dejar para el final de la sesion la practica sugerida y las preguntas de autoevaluacion.

Plan de avance

  • Bloque 1: Http rest y principios de diseno de apis.
  • Bloque intermedio: Contratos recursos y versionado y siguientes para consolidar criterio.
  • Bloque final: Proyecto de api y mapa de servicios y repaso transversal del resto del itinerario.

Metodo recomendado

Leer primero el objetivo del modulo, despues el desarrollo teorico, y solo entonces pasar a tabla, checklist, errores y practica. Ese orden ayuda a construir criterio antes de memorizar detalles.

Evidencias de aprendizaje

  • Capacidad para explicar el modulo sin leerlo.
  • Capacidad para distinguir conceptos proximos sin confundirlos.
  • Capacidad para trasladar el contenido a un escenario de trabajo real.

Exam available

This course includes a 20-question exam. Register for free to access the exam and earn your digital certificate.

Create free account

Glosario - APIs y Microservicios

Function

Bloque reutilizable con entradas y salida.

Variable

Nombre asociado a un valor o estado.

API

Interfaz programatica entre sistemas o componentes.

Module

Unidad de organizacion del codigo.

Exception

Error o condicion excepcional gestionable.

Type

Categoria de dato y operaciones asociadas.

Lab / Workshop

Laboratorio o taller - APIs y Microservicios

Taller orientado a aplicar APIs y Microservicios en un escenario controlado, convirtiendo teoria en una secuencia de trabajo observable.

Pasos

  • Leer el escenario y delimitar objetivo, actores y restricciones.
  • Usar como apoyo los modulos: Http rest y principios de diseno de apis, Contratos recursos y versionado, Autenticacion autorizacion y seguridad, Microservicios limites y responsabilidades.
  • Diseñar una respuesta, configuracion, flujo o decision justificada.
  • Validar riesgos, dependencias y evidencias de exito.

Evidencias esperadas

  • Artefacto final usable.
  • Razonamiento tecnico de las decisiones tomadas.
  • Checklist de validacion o criterios de salida.

Integrative case study

Caso practico integrador - APIs y Microservicios

Una organizacion necesita mejorar o implantar capacidades relacionadas con APIs y Microservicios. Tiene restricciones de tiempo, riesgos operativos y multiples actores implicados, por lo que no basta con listar conceptos: hay que convertirlos en decisiones, artefactos y prioridades.

Entregables

  • Mapa del problema y contexto.
  • Propuesta de enfoque o arquitectura.
  • Riesgos, dependencias y decisiones clave.
  • Plan de validacion o seguimiento.

Criterios de calidad

  • Coherencia tecnica con el contenido del curso.
  • Claridad para priorizar y justificar decisiones.
  • Aterrizaje realista en entregables y seguimiento.

Modulos especialmente utiles

  • Http rest y principios de diseno de apis
  • Contratos recursos y versionado
  • Autenticacion autorizacion y seguridad
  • Microservicios limites y responsabilidades

Recursos - APIs y Microservicios

Referencias oficiales y recomendadas

Estrategia de uso de bibliografia y documentacion

Empieza por la documentacion oficial del fabricante o framework, usa despues el material del curso para consolidar el modelo mental y consulta la referencia tecnica cuando necesites comandos, configuracion o detalles operativos concretos.

Evaluation

Evaluacion - APIs y Microservicios

Preguntas abiertas de repaso

  • Explica con un ejemplo por que 'Http rest y principios de diseno de apis' importa dentro del curso.
  • Explica con un ejemplo por que 'Contratos recursos y versionado' importa dentro del curso.
  • Explica con un ejemplo por que 'Autenticacion autorizacion y seguridad' importa dentro del curso.
  • Explica con un ejemplo por que 'Microservicios limites y responsabilidades' importa dentro del curso.
  • Explica con un ejemplo por que 'Mensajeria resiliencia y consistencia' importa dentro del curso.

Actividades de validacion

  • Comparar dos conceptos proximos del curso y justificar cuando usar cada uno.
  • Redactar un mini runbook, checklist o decision memo basado en un modulo.
  • Explicar a otra persona una decision tecnica o de gobierno derivada del curso.