Pular para o conteúdo

FastAPI Tutorial: Crie APIs Python Mais Rápidas e com Documentação Automática

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.