El logotipo está tomado del repositorio Github FastAPI
FastAPI es un marco web relativamente nuevo escrito en el lenguaje de programación Python para crear API REST (y, si lo intentas mucho, GraphQL) basada en nuevas características de Python 3.6+, como: sugerencias de tipo, asincronía nativa (asyncio ) Entre otras cosas, FastAPI se integra estrechamente con el esquema OpenAPI y genera automáticamente documentación para su API a través de Swagger y ReDoc
FastAPI se basa en Starlette y Pydantic .
Starlette es un micro-marco ASGI para escribir aplicaciones web.
Pydantic : una biblioteca para analizar y validar datos basados en sugerencias de tipo Python.
¿Qué dicen sobre FastAPI?
"[...] uso FastAPI con mucha frecuencia en los últimos días. [...] Definitivamente planeo usarlo para todos los servicios de ML de mi equipo en Microsoft. Algunos de ellos se integran en Windows y algunos productos de Office".
Kabir Khan - Microsoft ( ref )
"Si desea aprender otro marco para escribir una API REST, eche un vistazo a FastAPI [...] Es rápido, fácil de usar y aprender". [...] "
"Ahora usamos FastAPI para nuestras API [...] ¡Creo que te gustará! [...]"
Ines Montani - Matthew Honnibal - Fundadores de Explosion AI - creadores de spaCy ( ref ) - ( ref )
API mínima creada con FastAPI
Trataré de mostrarle cómo crear una API simple, pero al mismo tiempo útil, con documentación para desarrolladores. ¡Escribiremos un generador de frases al azar!
Instalar requisitos previos
pip install wheel -U pip install uvicorn fastapi pydantic
Nuevo módulo!
Uvicorn es un servidor web compatible con ASGI que usaremos para ejecutar nuestra aplicación.
Primero, crearemos la base de nuestra aplicación.
from fastapi import FastAPI app = FastAPI(title="Random phrase")
Esta aplicación ya se está ejecutando y se puede iniciar.
Escriba este comando en su terminal y abra la página en el navegador en http://127.0.0.1:8000/docs .
uvicorn <__>:app
Pero mientras que en nuestra aplicación no se indica un único punto final, ¡solucionémoslo!
Base de datos
Como estamos escribiendo un generador de frases al azar, obviamente necesitamos almacenarlos en algún lugar. Para esto, elegí un simple python-dict
.
Cree un archivo db.py
y comience a escribir código.
Importamos los módulos necesarios:
import typing import random from pydantic import BaseModel from pydantic import Field
Después, designamos dos modelos: la frase de entrada (la que nos enviará el usuario) y la "salida" (la que le enviaremos al usuario).
class PhraseInput(BaseModel): """Phrase model""" author: str = "Anonymous"
Después de eso, cree una clase simple para trabajar con la base de datos:
class Database: """ Our **fake** database. """ def __init__(self): self._items: typing.Dict[int, PhraseOutput] = {}
Ahora puede comenzar a escribir la API en sí.
API
Cree el archivo main.py
e importe los siguientes módulos:
from fastapi import FastAPI from fastapi import HTTPException from db import PhraseInput from db import PhraseOutput from db import Database
Inicializamos nuestra aplicación y base de datos:
app = FastAPI(title="Random phrase") db = Database()
¡Y escriba un método simple para obtener una frase aleatoria!
@app.get( "/get", response_description="Random phrase", description="Get random phrase from database", response_model=PhraseOutput, ) async def get(): try: phrase = db.get(db.get_random()) except IndexError: raise HTTPException(404, "Phrase list is empty") return phrase
Como puede ver, en el decorador también indico algunos otros valores necesarios para generar documentación más bella :) En la documentación oficial puede ver todos los parámetros posibles.
En este fragmento de código, estamos tratando de obtener una frase aleatoria de la base de datos, y si la base de datos está vacía, devolvemos un error con el código 404.
Del mismo modo, escribimos otros métodos:
@app.post( "/add", response_description="Added phrase with *id* parameter", response_model=PhraseOutput, ) async def add(phrase: PhraseInput): phrase_out = db.add(phrase) return phrase_out @app.delete("/delete", response_description="Result of deleting") async def delete(id: int): try: db.delete(id) except ValueError as e: raise HTTPException(404, str(e))
¡Y eso es todo! ¡Nuestra pequeña pero útil API está lista!
¡Ahora podemos iniciar la aplicación usando uvicorn , abrir la documentación en línea ( http://127.0.0.1/docs ) y probar nuestra API!

Materiales utiles
Por supuesto, no podría contarle todas las características de FastAPI, por ejemplo, como: sistema DI inteligente, middlewares, cookies, métodos de autenticación estándar en la API (jwt, oauth2, api-key) y mucho más.
Pero el propósito de este artículo no es tanto una descripción general de todas las características de este marco, sino cuánto empujarlo a explorarlo usted mismo. FastAPI tiene una excelente documentación con toneladas de ejemplos.
Código de un artículo sobre Github
Documentación oficial
Repositorio de Github
PS
cryo8822 hizo una traducción del artículo al inglés, ¡gracias! .