0% encontró este documento útil (0 votos)
50 vistas9 páginas

Fundamentos de FastAPI en Python

FastAPI es un framework moderno y eficiente para construir APIs web con Python, destacando por su velocidad, validación automática y documentación interactiva. Permite un desarrollo ágil y seguro, integrando características como asincronía nativa y un sistema de inyección de dependencias. Su arquitectura moderna lo hace ideal para manejar múltiples peticiones concurrentes, convirtiéndolo en una opción popular para desarrolladores y empresas.

Cargado por

Darwin Alexis
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
50 vistas9 páginas

Fundamentos de FastAPI en Python

FastAPI es un framework moderno y eficiente para construir APIs web con Python, destacando por su velocidad, validación automática y documentación interactiva. Permite un desarrollo ágil y seguro, integrando características como asincronía nativa y un sistema de inyección de dependencias. Su arquitectura moderna lo hace ideal para manejar múltiples peticiones concurrentes, convirtiéndolo en una opción popular para desarrolladores y empresas.

Cargado por

Darwin Alexis
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

📘 Fundamentos de FastAPI

1. Introducción

FastAPI es un framework moderno, rápido y eficiente para


construir APIs web con Python 3.7+, basado en los estándares
OpenAPI (anteriormente conocido como Swagger) y JSON Schema.
Fue creado por Sebastián Ramírez en 2018, con el objetivo de
combinar rendimiento, tipado, simplicidad y documentación
automática.

FastAPI está diseñado para ofrecer un desarrollo ágil, seguro y de alto


rendimiento, con una sintaxis limpia y moderna. Es ampliamente usado
en backend web, microservicios, inteligencia artificial, data
science y sistemas distribuidos.

2. Principales características

FastAPI destaca por varias razones que lo han convertido en uno de los
frameworks más amados en el ecosistema Python:

1. ⚡ Velocidad: Su rendimiento es comparable al de frameworks


asíncronos como [Link] o Go, gracias a Starlette (para la parte
web) y Pydantic (para validación de datos).

2. 🧠 Validación automática: Usa tipos de Python (type hints)


para validar automáticamente las entradas (request body,
parámetros, etc.).

3. 🧾 Documentación automática: Genera interfaces interactivas de


documentación con Swagger UI y ReDoc, sin necesidad de
código adicional.

4. 🧩 Tipado moderno: Integra el tipado estático de Python para


mejorar la calidad y robustez del código.

5. 🔄 Asincronía nativa: Compatible con async y await para construir


APIs no bloqueantes.

6. 🧰 Interoperabilidad: Compatible con cualquier ORM


(SQLAlchemy, Tortoise ORM, etc.), y con librerías como TensorFlow,
Scikit-learn o Celery.

7. 💡 Fácil aprendizaje: Su curva de aprendizaje es corta si ya se


conoce Python.
3. Instalación y configuración inicial

Para comenzar con FastAPI, primero se instala el framework y un


servidor ASGI (como Uvicorn) para ejecutarlo.

pip install fastapi

pip install "uvicorn[standard]"

Luego, se crea un archivo llamado [Link]:

from fastapi import FastAPI

app = FastAPI()

@[Link]("/")

def read_root():

return {"mensaje": "¡Hola, FastAPI!"}

Y se ejecuta el servidor con:

uvicorn main:app --reload

El argumento --reload recarga automáticamente el servidor al detectar


cambios en el código.

4. Conceptos fundamentales

FastAPI organiza la creación de una API en rutas, métodos HTTP, y


modelos de datos.

4.1 Rutas y métodos HTTP

Las rutas son funciones decoradas con @[Link](), @[Link](),


@[Link](), @[Link](), etc., que indican el tipo de petición HTTP.

@[Link]("/usuarios")

def listar_usuarios():

return [{"nombre": "Ana"}, {"nombre": "Carlos"}]


@[Link]("/usuarios")

def crear_usuario(nombre: str):

return {"mensaje": f"Usuario {nombre} creado"}

4.2 Parámetros de ruta

FastAPI permite definir parámetros dinámicos en las URLs:

@[Link]("/usuarios/{id}")

def obtener_usuario(id: int):

return {"usuario_id": id}

FastAPI automáticamente convierte id en int y genera errores 422 si el


tipo no coincide.

4.3 Parámetros de consulta (query parameters)

Se envían después del signo ? en la URL:

@[Link]("/buscar")

def buscar_usuario(nombre: str = None, edad: int = None):

return {"nombre": nombre, "edad": edad}

Ejemplo:

/buscar?nombre=Ana&edad=25

4.4 Cuerpo de las peticiones (Request Body)

Para recibir datos complejos, FastAPI usa Pydantic models, que validan
automáticamente el tipo de dato.

from pydantic import BaseModel

class Usuario(BaseModel):

nombre: str
edad: int

email: str

@[Link]("/usuarios/")

def crear_usuario(usuario: Usuario):

return {"mensaje": f"Usuario {[Link]} creado"}

Si el JSON enviado no cumple con la estructura, FastAPI responde con un


error detallado 422 indicando el campo incorrecto.

5. Tipos de datos y validación automática

FastAPI aprovecha los type hints de Python para validar, documentar


y autocompletar.

from typing import Optional

@[Link]("/producto/")

def obtener_producto(nombre: str, disponible: Optional[bool] = None):

return {"nombre": nombre, "disponible": disponible}

La validación ocurre de manera automática sin necesidad de escribir


lógica adicional.

6. Respuestas y códigos HTTP

FastAPI permite devolver respuestas personalizadas con status codes y


tipos de respuesta:

from fastapi import status

@[Link]("/login", status_code=status.HTTP_201_CREATED)

def login(usuario: Usuario):

return {"mensaje": "Inicio de sesión exitoso"}


También se puede usar Response o JSONResponse para un control más
fino.

7. Documentación automática

FastAPI genera automáticamente una documentación interactiva en dos


formatos:

 Swagger UI: [Link]

 ReDoc: [Link]

Esto ocurre gracias a los estándares OpenAPI y JSON Schema, lo que


facilita el trabajo colaborativo entre desarrolladores y equipos.

8. Asincronía con async / await

FastAPI permite definir rutas asíncronas para mejorar el rendimiento en


operaciones que dependen de I/O (como consultas a bases de datos o
llamadas a APIs externas):

import asyncio

@[Link]("/esperar")

async def esperar():

await [Link](2)

return {"mensaje": "Listo después de 2 segundos"}

Gracias al uso de Uvicorn (basado en ASGI), FastAPI puede manejar


miles de conexiones concurrentes sin bloquear el servidor.

9. Dependencias (Dependency Injection)

FastAPI tiene un potente sistema de inyección de dependencias que


permite reutilizar lógica común (como autenticación, configuración, o
conexiones a BD):

from fastapi import Depends


def obtener_token(token: str):

if token != "secreto123":

raise Exception("Token inválido")

return token

@[Link]("/protegido")

def protegido(token: str = Depends(obtener_token)):

return {"mensaje": "Acceso permitido"}

10. Manejo de errores

FastAPI permite definir excepciones personalizadas con respuestas


detalladas:

from fastapi import HTTPException

@[Link]("/item/{id}")

def obtener_item(id: int):

if id > 10:

raise HTTPException(status_code=404, detail="Item no


encontrado")

return {"item_id": id}

11. Middlewares

Los middlewares son funciones que se ejecutan antes y después de


cada solicitud. Sirven para agregar lógica común como logs,
autenticación o CORS.

from [Link] import CORSMiddleware

app.add_middleware(
CORSMiddleware,

allow_origins=["*"],

allow_credentials=True,

allow_methods=["*"],

allow_headers=["*"],

12. Integración con bases de datos

FastAPI no incluye ORM propio, pero se integra fácilmente con


SQLAlchemy, Tortoise ORM o Prisma.

Ejemplo básico con SQLAlchemy:

from sqlalchemy import create_engine, Column, Integer, String

from [Link] import declarative_base

from [Link] import sessionmaker

SQLALCHEMY_DATABASE_URL = "sqlite:///./[Link]"

engine = create_engine(SQLALCHEMY_DATABASE_URL)

SessionLocal = sessionmaker(bind=engine)

Base = declarative_base()

class UsuarioDB(Base):

__tablename__ = "usuarios"

id = Column(Integer, primary_key=True, index=True)

nombre = Column(String)

13. Autenticación y seguridad

FastAPI proporciona módulos listos para autenticación con OAuth2, JWT,


y Bearer Tokens.
Ejemplo simplificado con OAuth2PasswordBearer:

from [Link] import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@[Link]("/perfil")

def perfil(token: str = Depends(oauth2_scheme)):

return {"token": token}

14. Pruebas automáticas

FastAPI integra fácilmente pruebas con pytest y su cliente de prueba:

from [Link] import TestClient

client = TestClient(app)

def test_read_main():

response = [Link]("/")

assert response.status_code == 200

assert [Link]() == {"mensaje": "¡Hola, FastAPI!"}

15. Despliegue y rendimiento

FastAPI puede desplegarse en servidores como:

 Uvicorn (ASGI)

 Hypercorn

 Gunicorn + Uvicorn workers

Y servicios en la nube:

 AWS Lambda
 Google Cloud Run

 Docker / Kubernetes

Ejemplo de despliegue local:

uvicorn main:app --host [Link] --port 8000

16. Buenas prácticas

✅ Usar modelos Pydantic para validar datos.


✅ Separar rutas por módulos (routers).
✅ Usar Depends() para lógica compartida.
✅ Activar CORS solo para orígenes permitidos.
✅ Evitar operaciones bloqueantes sin async.
✅ Usar variables de entorno para configuraciones sensibles.

17. Conclusión

FastAPI representa una nueva generación de frameworks web en


Python: rápido, elegante, seguro y diseñado para desarrolladores
modernos.
Su enfoque basado en tipos, asincronía y documentación
automática lo hace ideal para crear APIs REST, microservicios, y
backends complejos con mínima fricción.

Gracias a su arquitectura moderna, es capaz de manejar miles de


peticiones concurrentes con un código limpio y legible, lo que lo
convierte en una elección destacada tanto para startups como para
grandes empresas tecnológicas.

En pocas palabras:

FastAPI es el futuro del desarrollo backend en Python.

También podría gustarte