Articulo de referencia

API rápida

{{cite web |title=fastapi repo | website=[[GitHub]] |url=https://github.com/tiangolo/fastapi/commits/master?after=eddbae948f04e13fe412dc45a569d10e34b698a4+1990&branch=master |da...

FastAPI es un framework web para crear API de servicios basadas en HTTP en Python 3.8+. [ 3 ] Utiliza Pydantic y sugerencias de tipos para validar , serializar y deserializar datos. FastAPI también genera automáticamente documentación OpenAPI para las API creadas con él. [ 4 ] Su lanzamiento inicial fue en 2018.

Componentes

Pydantic

Pydantic es una biblioteca de validación de datos para Python. Al escribir código en un IDE , Pydantic proporciona sugerencias de tipo basadas en anotaciones. [ 5 ] FastAPI utiliza ampliamente los modelos de Pydantic para la validación de datos, la serialización y la documentación automática de API. Estos modelos utilizan sugerencias de tipo estándar de Python, lo que proporciona una forma declarativa de especificar la estructura y los tipos de datos para las solicitudes entrantes (por ejemplo, cuerpos HTTP) y las respuestas salientes. [ 6 ]

from fastapi import FastAPI from pydantic import BaseModelaplicación = FastAPI ()clase Item ( BaseModel ): nombre : str precio : float es_oferta : bool | None = None@app . post ( "/items/" ) def create_item ( item : Item ): # El objeto 'item' ya está validado y tipificado return { "message" : "Item received" , "item_name" : item . name }

Starlette

Starlette es un marco/conjunto de herramientas ASGI ligero para admitir la funcionalidad asíncrona en Python. [ 7 ]

Uvicorn

Uvicorn es un servidor web/aplicación de bajo nivel mínimo para frameworks asíncronos, que sigue la especificación ASGI . Técnicamente, implementa un modelo multiproceso con un proceso principal, responsable de gestionar un grupo de procesos de trabajo y distribuir las solicitudes HTTP entrantes entre ellos. El número de procesos de trabajo está preconfigurado, pero también se puede ajustar en tiempo de ejecución. [ 8 ]

Integración OpenAPI

FastAPI genera automáticamente documentación OpenAPI para las API. Esta documentación incluye tanto Swagger UI como ReDoc , que proporcionan documentación interactiva de la API que puede utilizar para explorar y probar sus endpoints en tiempo real. Esto es particularmente útil para desarrollar, probar y compartir API con otros desarrolladores o usuarios. Swagger UI es accesible de forma predeterminada en /docs y ReDoc en la ruta /redoc . [ 9 ]

Características

operaciones asíncronas

La arquitectura de FastAPI admite de forma inherente la programación asíncrona . Este diseño permite que el bucle de eventos de un solo hilo gestione de forma eficiente un gran número de solicitudes concurrentes, especialmente al tratar con operaciones de entrada/salida como consultas a bases de datos o llamadas a API externas. Para más información, consulte el patrón async/await .

Inyección de dependencias

FastAPI incorpora un sistema de inyección de dependencias (DI) para gestionar y proporcionar servicios a los puntos finales HTTP. Este mecanismo permite a los desarrolladores declarar componentes como sesiones de base de datos o lógica de autenticación como parámetros de función. FastAPI resuelve automáticamente estas dependencias para cada solicitud, inyectando las instancias necesarias. [ 10 ]

from fastapi import Depends , HTTPException , status from db import DbSession# --- Dependencia para la sesión de base de datos --- def get_db (): db = DbSession () try : yield db finally : db . close ()@app . post ( "/items/" , status_code = status . HTTP_201_CREATED ) def create_item ( name : str , description : str , db : DbSession = Depends ( get_db )): new_item = Item ( name = name , description = description ) db . add ( new_item ) db . commit () db . refresh ( new_item ) return { "message" : "¡Elemento creado correctamente!" , "item" : new_item }@app . get ( "/items/ {item_id} " ) def read_item ( item_id : int , db : DbSession = Depends ( get_db )): item = db . query ( Item ) . filter ( Item . id == item_id ) . first () if item is None : raise HTTPException ( status_code = status . HTTP_404_NOT_FOUND , detail = "Item not found" ) return item

Compatibilidad con WebSockets

WebSockets permite la comunicación dúplex completa entre un cliente y un servidor. Esta capacidad es fundamental para aplicaciones que requieren un intercambio continuo de datos, como plataformas de mensajería instantánea, paneles de datos en tiempo real o juegos multijugador en línea. FastAPI aprovecha la implementación subyacente de Starlette, lo que permite una gestión eficiente de las conexiones y el procesamiento de mensajes. [ 11 ]

# Debes tener instalado el paquete 'websockets' from fastapi import WebSocket@app . websocket ( "/ws" ) async def websocket_endpoint ( websocket : WebSocket ): await websocket . accept () while True : data = await websocket . receive_text () await websocket . send_text ( f "El texto del mensaje fue: { data } " )

Tareas en segundo plano

FastAPI permite la ejecución de tareas en segundo plano después de que se haya enviado una respuesta HTTP al cliente. Esto permite que la API responda inmediatamente a las solicitudes del usuario mientras procesa simultáneamente operaciones no críticas o que consumen mucho tiempo en segundo plano. Las aplicaciones típicas incluyen el envío de notificaciones por correo electrónico, la actualización de cachés o el procesamiento posterior de datos. [ 12 ]

import time import shutil from fastapi import BackgroundTasks , UploadFile , File from utils import generate_thumbnail@app . post ( "/upload-image/" ) async def upload_image ( image : UploadFile = File ( ... ), background_tasks : BackgroundTasks ): file_location = f "uploaded_images/ { image . filename } " # Guardar la imagen subida con open ( image_path , "wb" ) as f : contents = await file . read () f . write ( contents )# Agregar generación de miniaturas como tarea en segundo plano background_tasks . add_task ( generate_thumbnail , file_location , "200x200" )return { "message" : f "Imagen ' { image . filename } ' subida. Generación de miniatura iniciada en segundo plano." }

Ejemplo

El siguiente código muestra una aplicación web sencilla que muestra " ¡Hola, mundo! " cuando se visita:

# Importar la clase FastAPI del paquete fastapi desde fastapi import FastAPI# Crea una instancia de la aplicación FastAPI app = FastAPI ()# Define una ruta GET para la URL raíz ("/") @app . get ( "/" ) async def read_root () -> str : # Devuelve una respuesta de texto plano return "¡Hola, mundo!"

Véase también

  • Sitio web oficialEdita esto en Wikidata
  • fastapi en GitHub

Referencias

  1. "fastapi repo" . GitHub . 05-12-2018.
  2. "Versión 0.139.2" . 16 de julio de 2026. Consultado el 17 de julio de 2026 .
  3. "FastAPI" . fastapi.tiangolo.com . Consultado el 10 de abril de 2024 .
  4. Lubanovic, Bill (6 de noviembre de 2019). Introducción a Python: Computación moderna en paquetes sencillos (2.ª ed.). O'Reilly Media, Inc. págs. 397, 418. ISBN   9781492051367.
  5. "Por qué usar Pydantic - Pydantic" . docs.pydantic.dev . Consultado el 21/09/2023 .
  6. "Cuerpo de la solicitud - FastAPI" . fastapi.tiangolo.com . Consultado el 30 de junio de 2025 .
  7. "Starlette" . www.starlette.io . Consultado el 21 de septiembre de 2023 .
  8. "Reiniciando los trabajadores de 'uvicorn' con la señal 'SIGHUP'" . bugfactory.io . Consultado el 17 de junio de 2024 .
  9. "Documentación de OpenAPI - FastAPI" .
  10. "Dependencias" . Consultado el 30 de junio de 2025 .
  11. "WebSockets - FastAPI" . fastapi.tiangolo.com . Consultado el 30 de junio de 2025 .
  12. "Tareas en segundo plano - FastAPI" . fastapi.tiangolo.com . Consultado el 30 de junio de 2025 .