Introducción a FastAPI
FastAPI es un marco de trabajo web moderno y rápido (de alto rendimiento) para construir APIs con Python 3.7+ basado en las sugerencias de tipos estándar de Python. Está diseñado para ser fácil de usar y eficiente, con un rendimiento comparable a los marcos de trabajo de NodeJS y Go.
FastAPI se construye sobre Starlette, un marco de trabajo asíncrono de alto rendimiento, y Pydantic, una poderosa biblioteca de validación y serialización de datos. Combina las mejores características de estas bibliotecas para proporcionar una forma sencilla y eficiente de construir APIs.
Historia
FastAPI fue creado por Sebastián Ramírez y lanzado en 2018. Rápidamente ganó popularidad debido a su velocidad y facilidad de uso. Ahora es uno de los marcos de trabajo de Python más populares para construir APIs.
Características de FastAPI
Rápido: FastAPI está diseñado para ser uno de los marcos de trabajo de Python más rápidos disponibles, gracias a su uso de la programación asíncrona y componentes de alto rendimiento.
Fácil de usar: FastAPI está diseñado para ser fácil de usar, con una API simple e intuitiva. Proporciona generación automática de documentación de API utilizando OpenAPI y JSON Schema.
Comprobación de tipos: FastAPI utiliza las sugerencias de tipos de Python para proporcionar validación automática de datos y serialización. Utiliza modelos Pydantic para definir los tipos de solicitud y respuesta, lo que facilita el manejo de la validación y serialización de datos.
Soporte asíncrono: FastAPI se basa en Starlette, que es un marco de trabajo asíncrono. Esto te permite escribir código asíncrono utilizando las palabras clave "async" y "await" de Python, lo que permite operaciones de API de alto rendimiento y concurrentes.
Inyección de dependencias: FastAPI admite la inyección de dependencias, lo que te permite gestionar e inyectar fácilmente dependencias en tus puntos finales de API. Esto hace que sea sencillo organizar y modularizar tu código.
Soporte para WebSocket: FastAPI proporciona soporte incorporado para la comunicación WebSocket, lo que te permite construir fácilmente aplicaciones en tiempo real.
Autenticación y autorización: FastAPI proporciona soporte incorporado para agregar autenticación y autorización a tus puntos finales de API. Admite varios métodos de autenticación, como OAuth2, JWT y más.
Ahora, vamos a ver algunos ejemplos para ver estas características en acción.
Ejemplo 1: Creación de una API simple con FastAPI
Comencemos creando una API simple utilizando FastAPI. Crearemos un punto final "/hello" que devuelva una respuesta JSON con un mensaje de saludo.
from fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
def hello():
return {"message": "¡Hola, FastAPI!"}
En este ejemplo, importamos la clase FastAPI del módulo fastapi. Luego creamos una instancia de FastAPI y definimos un punto final utilizando el decorador @app.get. La función hello es el controlador para el punto final "/hello", que devuelve una respuesta JSON con un mensaje de saludo.
Para ejecutar la API, podemos utilizar el siguiente comando:
uvicorn main:app --reload
Ahora, si visitamos http://localhost:8000/hello en nuestro navegador, deberíamos ver la respuesta JSON: {"message": "¡Hola, FastAPI!"}.
Ejemplo 2: Validación y serialización de solicitudes
FastAPI utiliza modelos Pydantic para la validación y serialización de solicitudes. Modifiquemos nuestro ejemplo anterior para validar y serializar los datos de la solicitud.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class HelloRequest(BaseModel):
name: str
@app.post("/hello")
def hello(request: HelloRequest):
return {"message": f"¡Hola, {request.name}!"}
En este ejemplo, definimos un modelo HelloRequest utilizando Pydantic. El modelo tiene un solo campo name de tipo str. Luego modificamos el punto final "/hello" para aceptar un objeto HelloRequest como el cuerpo de la solicitud. FastAPI valida automáticamente el cuerpo de la solicitud con el modelo y lo deserializa.
Si enviamos una solicitud POST a http://localhost:8000/hello con un cuerpo JSON como {"name": "John"}, la API responderá con {"message": "¡Hola, John!"}.
Ejemplo 3: Puntos finales asíncronos
FastAPI te permite escribir código asíncrono utilizando las palabras clave "async" y "await" de Python. Esto permite operaciones de API de alto rendimiento y concurrentes. Modifiquemos nuestro ejemplo anterior para hacer que el punto final "/hello" sea asíncrono.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class HelloRequest(BaseModel):
name: str
@app.post("/hello")
async def hello(request: HelloRequest):
return {"message": f"¡Hola, {request.name}!"}
En este ejemplo, agregamos la palabra clave "async" a la función hello para hacerla asíncrona. Esto permite que la función use "await" para pausar la ejecución y esperar otras operaciones asíncronas.
Ejemplo 4: Inyección de dependencias
FastAPI admite la inyección de dependencias, lo que te permite gestionar e inyectar fácilmente dependencias en tus puntos finales de API. Modifiquemos nuestro ejemplo anterior para inyectar una dependencia en el punto final "/hello".
from fastapi import Depends, FastAPI
from pydantic import BaseModel
app = FastAPI()
class HelloRequest(BaseModel):
name: str
def get_greeting():
return "Hola"
@app.post("/hello")
async def hello(request: HelloRequest, greeting: str = Depends(get_greeting)):
return {"message": f"{greeting}, {request.name}!"}
En este ejemplo, definimos una función get_greeting que devuelve el mensaje de saludo. Luego modificamos el punto final "hello" para inyectar el mensaje de saludo como una dependencia. FastAPI resuelve automáticamente la dependencia y la pasa a la función del punto final.
Para obtener más información y documentación detallada, puedes visitar el sitio web oficial de FastAPI: https://fastapi.tiangolo.com/.