Clase 00 — Introducción a las APIs
¿Qué es una API?
API (Application Programming Interface) es un conjunto de reglas y protocolos que permite que dos aplicaciones se comuniquen entre sí.
Pensá en un mesero de restaurante: vos (cliente) le pedís un plato (petición) al mesero (API), él va a la cocina (servidor) y te trae la comida (respuesta).
┌──────────┐ Petición ┌──────────┐ Consulta ┌──────────┐
│ Cliente │ ──────── ──────────► │ API │ ──────────────────► │ Servidor │
│ (tu app) │ ◄────────────────── │ (mesero) │ ◄────────────────── │ (cocina) │
└──────────┘ Respuesta └──────────┘ Resultado └──────────┘
¿Por qué son importantes las APIs?
| Beneficio | Ejemplo |
|---|---|
| Integración | Tu app muestra clima usando la API de OpenWeather |
| Automatización | Script que crea repos en GitHub automáticamente |
| Reutilización | Un backend sirve a web, móvil y CLI |
| Escalabilidad | Microservicios se hablan entre sí vía APIs |
| Ecosistema | Stripe para pagos, Twilio para SMS, AWS para infra |
Tipos de APIs
Por acceso
| Tipo | Descripción | Ejemplo |
|---|---|---|
| Pública (Open) | Cualquiera puede usarla | PokéAPI, OpenWeather |
| Privada (Internal) | Solo dentro de la organización | API de microservicios internos |
| Partner | Solo socios autorizados | APIs de proveedores de pago |
| Compuesta | Combina múltiples APIs | Gateway que agrega datos |
Por arquitectura
| Estilo | Protocolo | Formato | Uso típico |
|---|---|---|---|
| REST | HTTP | JSON/XML | CRUD, web, móvil (el más común) |
| GraphQL | HTTP | JSON | Consultas flexibles, Facebook |
| gRPC | HTTP/2 | Protocol Buffers | Microservicios, alto rendimiento |
| SOAP | HTTP/SMTP | XML | Empresarial, legacy, bancos |
| WebSocket | WS/WSS | Variado | Tiempo real, chat, streaming |
| Webhook | HTTP (push) | JSON | Notificaciones, eventos |
REST — El estándar de la industria
REST (Representational State Transfer) es el estilo más popular. El 90%+ de las APIs modernas son REST.
# REST se basa en:
# 1. Recursos identificados por URLs
# 2. Métodos HTTP estándar (GET, POST, PUT, DELETE)
# 3. Respuestas en JSON (generalmente)
# 4. Sin estado (stateless)
# Ejemplo: Obtener un Pokémon
curl -s https://pokeapi.co/api/v2/pokemon/pikachu | jq '{nombre: .name, id: .id}'
# {"nombre": "pikachu", "id": 25}
Tu primera petición a una API
# 1. API pública sin autenticación
curl -s https://pokeapi.co/api/v2/pokemon/25 | jq '{
id: .id,
nombre: .name,
tipos: [.types[].type.name],
peso_kg: (.weight / 10)
}'
# 2. API de chistes
curl -s https://official-joke-api.appspot.com/random_joke | jq '.'
# 3. Tu IP pública
curl -s https://ipinfo.io | jq '{ip, city, region, country}'
# 4. Datos de un país
curl -s https://restcountries.com/v3.1/name/peru | jq '.[0] | {
nombre: .name.common,
capital: .capital[0],
poblacion: .population,
moneda: (.currencies | keys[0]),
region: .region
}'
Anatomía de una petición API
POST https://api.ejemplo.com/v2/usuarios?activo=true HTTP/1.1
┌─────────────────────────────────────────────────────────────┐
│ Método : POST │
│ Base URL : https://api.ejemplo.com │
│ Versión : /v2 │
│ Recurso : /usuarios │
│ Query : ?activo=true │
│ Protocolo : HTTP/1.1 │
└─────────────────────────────────────────────────────────────┘
Headers:
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUz...
Accept: application/json
Body:
{
"nombre": "Ana García",
"email": "ana@dev.com",
"rol": "devops"
}
Anatomía de una respuesta API
HTTP/1.1 201 Created
Headers:
Content-Type: application/json
X-Request-ID: req-12345
X-RateLimit-Remaining: 58
Location: /v2/usuarios/42
Body:
{
"id": 42,
"nombre": "Ana García",
"email": "ana@dev.com",
"rol": "devops",
"creado_en": "2026-02-20T10:00:00Z"
}
APIs en el mundo DevOps
Las APIs están en todos lados en DevOps:
# GitHub API — Gestión de repos, PRs, issues
curl -s https://api.github.com/repos/kubernetes/kubernetes | jq '{stars: .stargazers_count}'
# Docker API — Gestión de contenedores
curl -s --unix-socket /var/run/docker.sock http://localhost/containers/json | jq '.[].Names'
# AWS — Todos los servicios AWS son APIs
aws ec2 describe-instances # → Llama a la API de EC2
# Kubernetes — El cluster entero es una API
kubectl get pods # → Llama a la API de Kubernetes
# Terraform — Provider APIs
terraform apply # → Llama APIs de AWS/GCP/Azure
Herramientas para trabajar con APIs
| Herramienta | Tipo | Uso |
|---|---|---|
| curl | CLI | Peticiones desde terminal |
| jq | CLI | Procesar respuestas JSON |
| httpie | CLI | curl más amigable |
| Postman | GUI | Probar APIs visualmente |
| Insomnia | GUI | Alternativa a Postman |
| Swagger/OpenAPI | Spec | Documentar APIs |
| Bruno | GUI/CLI | Open source, git-friendly |
Ejemplo: Explorar una API desconocida
#!/bin/bash
# explore-api.sh - Explorar una API pública
API_URL="${1:?Uso: $0 <url>}"
echo "=== Explorando: $API_URL ==="
# 1. ¿Responde?
echo "1. Conectividad:"
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$API_URL")
echo " HTTP: $code"
# 2. Headers de respuesta
echo ""
echo "2. Headers importantes:"
curl -sI --max-time 10 "$API_URL" | grep -iE "^(content-type|server|x-rate)" | sed 's/^/ /'
# 3. Preview del body
echo ""
echo "3. Respuesta (preview):"
body=$(curl -s --max-time 10 "$API_URL")
if echo "$body" | jq '.' &>/dev/null; then
echo "$body" | jq '.' | head -20
else
echo "$body" | head -10
fi
# 4. Tamaño
echo ""
echo "4. Tamaño:"
curl -s -o /dev/null -w " %{size_download} bytes\n" --max-time 10 "$API_URL"
Ejercicios
- Hacé una petición a
https://pokeapi.co/api/v2/pokemon/pikachuy extraé nombre, tipos y habilidades - Usá
https://restcountries.com/v3.1/name/argentinapara obtener nombre, capital y población - Hacé peticiones a 3 APIs públicas diferentes y compará sus respuestas
- Creá un script que explore una API y muestre: código HTTP, headers, tipo de contenido y preview
- Investigá qué APIs usa tu herramienta DevOps favorita (Docker, Kubernetes, GitHub, Terraform)