Aplicación web FastAPI

Este capítulo te guía desde cero para crear tu primera aplicación web con FastAPI y experimentar la documentación de API generada automáticamente.


Diferencias de posicionamiento entre FastAPI y Django/Flask

FastAPI es una estrella emergente entre los frameworks web de Python, posicionándose entre Django y Flask.

CaracterísticasDjangoFlaskFastAPI
Filosofía de diseñoBaterías incluidasMicroframework, extensible según necesidadAlto rendimiento, impulsado por tipos
Soporte asíncronoCompatible desde 3.1+Sin soporte nativoasync/await nativo
Documentación de APIRequiere drf-spectacularRequiere FlasggerGenera automáticamente Swagger UI
Validación de datosDjango Forms / DRF SerializerFlask-WTF / manualPydantic (integrado)
ServidorWSGI(Gunicorn)WSGI(Gunicorn)ASGI(Uvicorn)
Seguridad de tiposOpcionalOpcionalObliga a usar type hints de Python

La mayor diferencia de FastAPI:Todo impulsado por los type hints de Python—validación automática de parámetros de ruta, serialización automática de solicitudes/respuestas y generación automática de documentación interactiva.


Preparación del entorno

$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install fastapi uvicorn jinja2 python-multipart

Explicación de las tres dependencias principales:

  • fastapi: el framework web en sí
  • uvicorn: servidor ASGI (equivalente a Gunicorn en Flask)
  • jinja2: motor de plantillas (opcional, pero necesario para SSR)

Aplicación mínima de FastAPI

Ejemplo

# Ruta del archivo: main.py
from fastapi import FastAPI

# Crear instancia de FastAPI
app = FastAPI(
    title="Blog de EJEMPLO",
    description="Sitio de exhibición de blog personal creado con FastAPI",
    version="1.0.0"
)

@app.get("/")           # Decorador de ruta para solicitudes GET
def index():
    """Página de inicio"""
    return {"message": "Bienvenido al blog de EJEMPLO"}

@app.get("/hello/{name}")   # Parámetro de ruta {name}
def hello(name: str):       # FastAPI valida automáticamente según los type hints
    return {"greeting": f"¡Hola, {name}!"}

Iniciar el servidor

(venv) $ uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000

Ten en cuenta que la forma de iniciarlo es diferente a Flask:

  • Flask:flask run(basado en Werkzeug)
  • FastAPI:uvicorn main:app(basado en ASGI, con soporte nativo para asíncrono)

Documentación de API generada automáticamente

Esta es la característica más sorprendente de FastAPI:Sin escribir código adicional, genera documentación interactiva automáticamente.。

Visita/docsVerás Swagger UI, puedes probar la API directamente en la página:

http://127.0.0.1:8000/docs      # Swagger UI(交互式测试)
http://127.0.0.1:8000/redoc     # ReDoc(只读文档,更美观)

En Swagger UI: haz clic en GET /hello/{name} → Try it out → introduce name → Execute, y verás la respuesta real.


Planificación de la estructura de directorios del proyecto

blog_project/
├── main.py               # 应用入口
├── models.py             # SQLAlchemy ORM 模型
├── schemas.py            # Pydantic Schema(FastAPI 独有)
├── database.py           # 数据库连接与 Session
├── auth.py               # JWT 认证逻辑
├── routers/              # APIRouter 路由模块
│   ├── posts.py
│   ├── categories.py
│   ├── users.py
│   └── favorites.py
├── templates/            # Jinja2 模板
├── static/               # 静态文件
└── alembic/              # 数据库迁移

Flask organiza las rutas con Blueprint, FastAPI usaAPIRouter. El concepto es similar pero la sintaxis es diferente, y APIRouter trae restricciones de tipo de forma natural.


Resumen del capítulo

En este capítulo completaste tres cosas: instalaste FastAPI + Uvicorn, escribiste la primera ruta con type hints, y accediste a la documentación interactiva de API generada automáticamente en /docs.

Punto clave: FastAPI usa los type hints de Python para impulsar la validación de parámetros y la generación de documentación, esta es la característica más esencial que lo distingue de Django/Flask.

Otras extensiones