Capítulo 2, Básico
Instalando e rodando o primeiro app
Em poucos minutos você tem uma API no ar. O importante é fazer isso dentro de um ambiente isolado, e saber o que cada comando faz.
Requisitos
O FastAPI atual exige Python 3.10 ou superior. Para conferir qual Python você tem:
python3 --version
No Windows, use python --version (ou py --version). Se a versão for mais antiga que a 3.10, atualize antes de continuar.
Criar o projeto e instalar
Um ambiente virtual isola as dependências de cada projeto, para que um não quebre o outro. Escolha a ferramenta que você usa:
uv init minha-api
cd minha-api
uv add "fastapi[standard]"
O uv add cria o ambiente, instala o pacote e o registra no pyproject.toml. Para executar qualquer comando dentro do ambiente, use o prefixo uv run.
Instalar sem ambiente virtual funciona, mas é uma má ideia: dois projetos que precisam de versões diferentes do FastAPI passam a brigar pelo mesmo Python. As aspas em "fastapi[standard]" evitam que o terminal interprete os colchetes.
O extra [standard] traz o uvicorn (o servidor que roda a aplicação), o comando fastapi e as dependências de formulários e upload. Nos testes, você também vai querer o cliente HTTP que o TestClient usa:
uv add --dev pytest httpx2
O primeiro app
Crie o arquivo main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"mensagem": "Olá, FastAPI"}
Para ver o que a rota devolve sem subir um servidor, o TestClient faz a requisição em memória. Todo o curso usa esse recurso para mostrar resultados reais:
from fastapi.testclient import TestClient
cliente = TestClient(app)
resposta = cliente.get("/")
print(resposta.status_code, resposta.json())
200 {'mensagem': 'Olá, FastAPI'}
Rodar o servidor
O comando de desenvolvimento do FastAPI sobe o servidor e reinicia sozinho a cada vez que você salva o arquivo:
uv run fastapi dev main.py
Abra http://127.0.0.1:8000 no navegador para ver o JSON, e http://127.0.0.1:8000/docs para a documentação interativa. A forma clássica, que você vai encontrar em muito material, chama o uvicorn diretamente e dá o mesmo resultado:
uv run uvicorn main:app --reload
O texto main:app significa "no módulo main, o objeto chamado app". Em produção, o comando é fastapi run main.py (sem recarga automática), e o capítulo 30 detalha isso.
As páginas que vêm de graça
O FastAPI cria sozinho três endereços além das suas rotas:
print(cliente.get("/docs").status_code, cliente.get("/redoc").status_code, cliente.get("/openapi.json").status_code)
200 200 200
| Endereço | O que é |
|---|---|
/docs | Swagger UI: lista as rotas e deixa você testá-las |
/redoc | A mesma documentação, em um formato de leitura |
/openapi.json | A descrição da API, que as outras duas páginas usam |
O que é `--reload`
O recarregamento automático é só para desenvolvimento. Ele observa os arquivos e reinicia o processo a cada mudança, o que consome recursos e não é seguro em produção.
Exercício 1
Uma rota de saúde
Crie um app com a rota GET /saude que devolva {"status": "ok"}, e confira com o TestClient. Rotas assim são usadas por plataformas de deploy para saber se a aplicação está viva.