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ísticas | Django | Flask | FastAPI |
|---|---|---|---|
| Filosofía de diseño | Baterías incluidas | Microframework, extensible según necesidad | Alto rendimiento, impulsado por tipos |
| Soporte asíncrono | Compatible desde 3.1+ | Sin soporte nativo | async/await nativo |
| Documentación de API | Requiere drf-spectacular | Requiere Flasgger | Genera automáticamente Swagger UI |
| Validación de datos | Django Forms / DRF Serializer | Flask-WTF / manual | Pydantic (integrado) |
| Servidor | WSGI(Gunicorn) | WSGI(Gunicorn) | ASGI(Uvicorn) |
| Seguridad de tipos | Opcional | Opcional | Obliga 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
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