O FastAPI é um framework para APIs em Python que usa as dicas de tipo (type hints) da própria linguagem para validar dados e gerar documentação. Este tutorial monta uma API pequena e mostra onde ele ajuda e onde exige cuidado.
O que a documentação oficial afirma
A página do projeto descreve o framework como de “altíssima performance, no mesmo nível de NodeJS e Go”, graças ao Starlette (camada web) e ao Pydantic (validação). Também fala em reduzir cerca de 40% dos erros induzidos por desenvolvedores e em acelerar o desenvolvimento em 200% a 300%. Essas são afirmações do próprio projeto, não medições independentes.
Em adoção, a pesquisa State of Python 2025, da JetBrains com a PSF, mostra o FastAPI saltando de 29% para 38% de uso entre quem desenvolve para web, à frente de Django (35%) e Flask (34%). A própria pesquisa atribui parte disso ao grande número de iniciantes vindos de IA, ML e dados.
Instalação
pip install "fastapi[standard]"
As aspas importam em alguns terminais. A documentação atual usa o pacote com o extra standard, que já traz o comando fastapi.
Primeira API
Crie o arquivo main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"mensagem": "Olá, mundo!"}
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
Para rodar em desenvolvimento:
fastapi dev main.py
O modo dev recarrega o servidor a cada alteração. Não use esse modo em produção. Se preferir chamar o Uvicorn diretamente, uvicorn main:app --reload faz o mesmo.
Documentação automática
Com o servidor ligado, abra http://127.0.0.1:8000/docs. O FastAPI monta sozinho uma interface Swagger UI a partir do seu código, no padrão OpenAPI, onde dá para testar as rotas pelo navegador.
Validação com Pydantic
from pydantic import BaseModel
class Produto(BaseModel):
nome: str
preco: float
em_oferta: bool = False
descricao: str | None = None
@app.post("/produtos/")
async def criar_produto(produto: Produto):
preco_final = produto.preco * 0.9 if produto.em_oferta else produto.preco
return {"nome": produto.nome, "preco_final": preco_final}
Se você enviar "preco": "caro", o FastAPI responde com um erro detalhado indicando qual campo falhou, antes de o seu código rodar. Adicione um campo novo ao modelo, como estoque: int, e ele aparece em /docs sem trabalho extra.
Async: o aviso que costuma faltar
O FastAPI roda sobre ASGI e aceita async def. Isso só ajuda quando as bibliotecas chamadas dentro da rota também são assíncronas, como drivers de banco async e clientes HTTP async. Chamar código bloqueante dentro de uma rota async def prende o servidor e anula a vantagem. Funções comuns com def funcionam bem, e o framework as executa fora do laço de eventos.
Flask ou FastAPI?
- Flask: servidor WSGI, síncrono; validação e documentação vêm por extensões.
- FastAPI: ASGI; validação e documentação embutidas.
Para um sistema legado em Flask ou um micro-app, trocar dificilmente compensa. Para uma API que vai crescer e precisa de contrato validado e documentação atualizada, o FastAPI poupa trabalho.
Quem usa
A página oficial reúne depoimentos de engenheiros: um da Microsoft, que planeja usá-lo em serviços de ML integrados a produtos como Windows e Office; um grupo da Uber, que o adotou para servir previsões no Ludwig; e um da Netflix, que anunciou o Dispatch, framework de gestão de crises, construído com ele. São relatos individuais publicados no site do projeto, e não uma lista oficial de adoção corporativa.