O logotipo é retirado do repositório Github FastAPI
FastAPI é uma estrutura da Web relativamente nova, escrita na linguagem de programação Python para criar API REST (e, se você se esforçar, em seguida, GraphQL) com base em novos recursos do Python 3.6+, como: dicas de tipo, assincronia nativa (asyncio ) Entre outras coisas, o FastAPI integra-se fortemente ao esquema OpenAPI e gera automaticamente a documentação para sua API através do Swagger e ReDoc
FastAPI é baseado em Starlette e Pydantic .
Starlette é uma micro-estrutura ASGI para escrever aplicativos da web.
Pydantic - uma biblioteca para analisar e validar dados com base nas dicas do tipo Python.
O que eles dizem sobre o FastAPI?
"[...] eu uso o FastAPI com muita frequência nos últimos dias. [...] Definitivamente planejo usá-lo para todos os serviços de ML da minha equipe na Microsoft. Alguns deles se integram ao Windows e a alguns produtos do Office."
Kabir Khan - Microsoft ( ref )
"Se você quiser aprender outra estrutura para escrever uma API REST, dê uma olhada no FastAPI [...] É rápido, fácil de usar e aprender. [...]"
"Agora usamos o FastAPI para nossas APIs [...] acho que você vai gostar! [...]"
Ines Montani - Matthew Honnibal - fundadores da Explosion AI - spaCy creators ( ref ) - ( ref )
API mínima criada usando FastAPI
Vou tentar mostrar como criar uma API simples, mas ao mesmo tempo útil, com documentação para desenvolvedores. Vamos escrever um gerador de frases aleatórias!
Instalando pré-requisitos
pip install wheel -U pip install uvicorn fastapi pydantic
Novo módulo!
O Uvicorn é um servidor da Web compatível com ASGI que usaremos para executar nosso aplicativo.
Primeiro, criaremos a base do nosso aplicativo.
from fastapi import FastAPI app = FastAPI(title="Random phrase")
Este aplicativo já está em execução e pode ser iniciado.
Escreva este comando no seu terminal e abra a página no navegador em http://127.0.0.1:8000/docs .
uvicorn <__>:app
Mas enquanto em nosso aplicativo não é indicado um único ponto final - vamos corrigi-lo!
Banco de Dados
Como estamos escrevendo um gerador de frases aleatórias, obviamente precisamos armazená-los em algum lugar. Para isso, escolhi um simples python-dict
.
Crie um arquivo db.py
e comece a escrever o código.
Importamos os módulos necessários:
import typing import random from pydantic import BaseModel from pydantic import Field
Depois - designamos dois modelos: a frase de entrada (a que o usuário nos enviará) e a "saída" (a que enviaremos ao usuário).
class PhraseInput(BaseModel): """Phrase model""" author: str = "Anonymous"
Depois disso, crie uma classe simples para trabalhar com o banco de dados:
class Database: """ Our **fake** database. """ def __init__(self): self._items: typing.Dict[int, PhraseOutput] = {}
Agora você pode começar a escrever a própria API.
API
Crie o arquivo main.py
e importe os seguintes módulos:
from fastapi import FastAPI from fastapi import HTTPException from db import PhraseInput from db import PhraseOutput from db import Database
Inicializamos nosso aplicativo e banco de dados:
app = FastAPI(title="Random phrase") db = Database()
E escreva um método simples para obter uma frase aleatória!
@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 você pode ver, no decorador, também indico alguns outros valores necessários para gerar uma documentação mais bonita :) Na documentação oficial, você pode ver todos os parâmetros possíveis.
Neste pedaço de código, estamos tentando obter uma frase aleatória do banco de dados e, se o banco de dados estiver vazio, retornamos um erro com o código 404.
Da mesma forma, escrevemos outros 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))
E é isso aí! Nossa pequena mas útil API está pronta!
Agora podemos iniciar o aplicativo usando o uvicorn , abrir a documentação on-line ( http://127.0.0.1/docs ) e experimentar nossa API!

Materiais úteis
Obviamente, não pude falar sobre todos os recursos do FastAPI, por exemplo, como: sistema inteligente de DI, middlewares, cookies, métodos de autenticação padrão na API (jwt, oauth2, api-key) e muito mais!
Mas o objetivo deste artigo não é tanto uma visão geral de todos os recursos dessa estrutura, mas também um esforço para você explorá-la. O FastAPI possui uma excelente documentação com vários exemplos.
Código de um artigo no Github
Documentação oficial
Repositório do Github
PS
cryo8822 fez uma tradução do artigo para inglês, obrigado! .