FastAPI
¿Qué es FastAPI?
FastAPI es un framework web moderno y de alto rendimiento para construir APIs con Python 3.7+ que se basa en la tipificación estándar de Python. Está diseñado para crear APIs de forma rápida y sencilla, optimizando al máximo la eficiencia y la velocidad.
Características Principales:
- Tipificación Estándar: FastAPI utiliza las anotaciones de tipo estándar de Python, lo que facilita la lectura y el desarrollo.
- Documentación Automática: Basado en los estándares OpenAPI y JSON Schema, FastAPI genera automáticamente una interfaz de usuario interactiva para la API.
- Validación Automática: Los datos entrantes se validan automáticamente basándose en las anotaciones de tipo.
¿Por qué se usa?
FastAPI ha ganado popularidad debido a varias razones:
- Alta Performance: Es uno de los frameworks más rápidos disponibles, solo superado por NodeJS y Go en ciertos benchmarks.
- Desarrollo Rápido: Reduce el tiempo y la complejidad al desarrollar, gracias a las funcionalidades integradas como la validación automática y la documentación.
- Seguridad Integrada: Proporciona herramientas para la autenticación, la autorización y la protección contra ataques comunes.
¿Por qué es tan simple?
La simplicidad de FastAPI radica en la combinación de Python moderno y las anotaciones de tipo. Estas anotaciones permiten a FastAPI manejar muchas tareas automáticamente, como la serialización, la validación de datos y la generación de documentación.
Ejemplo de endpoint simple:
El siguiente código demuestra cómo crear un endpoint simple que responde a una solicitud GET:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
Ejemplo de endpoint con parámetros:
Los endpoints pueden recibir parámetros a través de la URL o como parámetros de consulta:
@app.get("/items/{item_id}")
def read_item(item_id: int, query_param: str = None):
return {"item_id": item_id, "query_param": query_param}
Ejemplo de endpoint usando Pydantic y BaseModel:
Pydantic es una biblioteca de validación y serialización de datos que se integra perfectamente con FastAPI. Permite definir modelos y validar automáticamente los datos entrantes:
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
def create_item(item: Item):
return item
Dependencias y Gestión de Bases de Datos:
FastAPI tiene un sistema de dependencias integrado que permite inyectar funciones o clases en los endpoints. Esto es especialmente útil para gestionar conexiones a bases de datos:
from peewee import PostgresqlDatabase
from fastapi import Depends
db = PostgresqlDatabase(
'iot_db',
user='postgres',
password='postgres',
host='db',
port='5432'
)
def get_database():
db.connect()
try:
yield db
finally:
if not db.is_closed():
db.close()
@app.get("/ejemplo/")
async def get_items(database: PostgresqlDatabase = Depends(get_database)):
# Aquí pueden acceder a la base de datos y hacer las consultas que necesiten
return {"message": "Hello World"}
El sistema de dependencias asegura que la conexión a la base de datos esté disponible en cada llamada al endpoint y que se cierre adecuadamente una vez finalizada la operación.
FastAPI continúa siendo una excelente opción para desarrollar APIs modernas, ofreciendo una combinación de rapidez, simplicidad y robustez. Con una comunidad activa y una documentación extensa, es una herramienta poderosa en el arsenal de cualquier desarrollador Python.