Skip to content

1. Introducción a FastAPI

FastAPI es un framework web moderno y de alto rendimiento para construir APIs con Python 3.7+. Está basado en estándares abiertos como OpenAPI y JSON Schema, lo que permite generar documentación automática.

CaracterísticaDescripción
Alto rendimientoComparable a NodeJS y Go gracias a Starlette y Pydantic
Tipado estáticoUsa type hints de Python para validación automática
Documentación automáticaGenera Swagger UI y ReDoc sin configuración adicional
Asíncrono nativoSoporte completo para async/await
Fácil de aprenderSintaxis intuitiva y curva de aprendizaje corta
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def inicio():
return {"mensaje": "¡Hola, FastAPI!"}

FastAPI está diseñado para construir APIs RESTful de manera rápida y eficiente:

  • APIs REST: Backends para aplicaciones web y móviles
  • Microservicios: Servicios pequeños e independientes
  • Machine Learning: Servir modelos de ML como APIs
  • Webhooks: Recibir y procesar eventos externos
  • Backends en tiempo real: Con WebSockets
API para app móvil
from fastapi import FastAPI
app = FastAPI()
# Endpoint para obtener usuarios
@app.get("/usuarios")
def obtener_usuarios():
return [
{"id": 1, "nombre": "Ana"},
{"id": 2, "nombre": "Carlos"}
]
# Endpoint para obtener un usuario específico
@app.get("/usuarios/{usuario_id}")
def obtener_usuario(usuario_id: int):
return {"id": usuario_id, "nombre": "Usuario encontrado"}

🔄 1.3 Diferencias entre FastAPI, Flask y Django

Section titled “🔄 1.3 Diferencias entre FastAPI, Flask y Django”
AspectoFastAPIFlaskDjango
TipoAPI-firstMicroframeworkFull-stack
Rendimiento⚡ Muy altoMedioMedio
TipadoObligatorioOpcionalOpcional
Documentación auto✅ Sí❌ No❌ No
Async nativo✅ Sí❌ NoParcial
Curva aprendizajeBajaMuy bajaAlta
Baterías incluidasPocasNingunaMuchas
  • FastAPI: APIs modernas, microservicios, ML
  • Flask: Prototipos rápidos, aplicaciones simples
  • Django: Aplicaciones web completas con admin, ORM, auth
FastAPI
# FastAPI
from fastapi import FastAPI
app = FastAPI()
@app.get("/saludo/{nombre}")
def saludo(nombre: str):
return {"mensaje": f"Hola, {nombre}"}
Flask
# Flask
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/saludo/<nombre>")
def saludo(nombre):
return jsonify({"mensaje": f"Hola, {nombre}"})

FastAPI es uno de los frameworks más rápidos de Python, comparable a NodeJS y Go:

FrameworkRequests/segundo
FastAPI~15,000+
Flask~4,000
Django~3,000
Validación automática
from fastapi import FastAPI
app = FastAPI()
# El tipado valida automáticamente los datos
@app.get("/producto/{producto_id}")
def obtener_producto(producto_id: int, precio_min: float = 0.0):
# producto_id DEBE ser int
# precio_min DEBE ser float (opcional, default 0.0)
return {
"id": producto_id,
"precio_minimo": precio_min
}
# Si envías /producto/abc -> Error 422 automático
# Si envías /producto/5?precio_min=abc -> Error 422 automático

FastAPI genera documentación interactiva sin código adicional:

  • Swagger UI: Disponible en /docs
  • ReDoc: Disponible en /redoc

💼 1.5 Casos de uso en aplicaciones reales

Section titled “💼 1.5 Casos de uso en aplicaciones reales”
  • Microsoft: Servicios internos
  • Netflix: APIs de microservicios
  • Uber: Procesamiento de datos
  • Spotify: Backends de ML
API E-Commerce
from fastapi import FastAPI
app = FastAPI(
title="API E-Commerce",
description="API para tienda en línea",
version="1.0.0"
)
@app.get("/productos")
def listar_productos():
return [
{"id": 1, "nombre": "Laptop", "precio": 999.99},
{"id": 2, "nombre": "Mouse", "precio": 29.99}
]
@app.get("/productos/{producto_id}")
def obtener_producto(producto_id: int):
return {"id": producto_id, "nombre": "Laptop", "precio": 999.99}
@app.get("/carrito/{usuario_id}")
def ver_carrito(usuario_id: int):
return {"usuario_id": usuario_id, "items": [], "total": 0.0}

🏗️ 1.6 Arquitectura básica de una API REST

Section titled “🏗️ 1.6 Arquitectura básica de una API REST”
ConceptoDescripción
RecursoEntidad que expone la API (usuarios, productos)
EndpointURL que representa un recurso
Método HTTPAcción a realizar (GET, POST, PUT, DELETE)
RequestPetición del cliente al servidor
ResponseRespuesta del servidor al cliente
MétodoAcciónEjemplo
GETObtener datosListar usuarios
POSTCrear datosCrear usuario
PUTActualizar completoActualizar usuario
PATCHActualizar parcialCambiar email
DELETEEliminarBorrar usuario
API REST básica
from fastapi import FastAPI
app = FastAPI()
# Base de datos simulada
usuarios = []
# GET - Obtener todos los usuarios
@app.get("/usuarios")
def listar_usuarios():
return usuarios
# GET - Obtener un usuario por ID
@app.get("/usuarios/{usuario_id}")
def obtener_usuario(usuario_id: int):
for usuario in usuarios:
if usuario["id"] == usuario_id:
return usuario
return {"error": "Usuario no encontrado"}
# POST - Crear un usuario (simplificado)
@app.post("/usuarios")
def crear_usuario(nombre: str):
nuevo_usuario = {"id": len(usuarios) + 1, "nombre": nombre}
usuarios.append(nuevo_usuario)
return nuevo_usuario
# DELETE - Eliminar un usuario
@app.delete("/usuarios/{usuario_id}")
def eliminar_usuario(usuario_id: int):
for i, usuario in enumerate(usuarios):
if usuario["id"] == usuario_id:
usuarios.pop(i)
return {"mensaje": "Usuario eliminado"}
return {"error": "Usuario no encontrado"}

🐝