Introdução
Curso de FastAPI
Do primeiro endpoint à API em produção, com código verificado por execução e um projeto completo de blog com PostgreSQL.
Para quem é este material
O FastAPI virou uma das formas mais usadas de construir APIs em Python, porque junta três ideias: você descreve os dados com anotações de tipo, e o framework tira daí a validação, a conversão e a documentação interativa, sem código extra. Eu organizei estas notas em cinco partes, do "Olá, mundo" até uma API de blog com usuários, JWT e banco de dados.
| Parte | Para quem | O que você sabe fazer no final |
|---|---|---|
| Básico | Quem sabe Python básico e nunca fez uma API | Criar rotas, receber dados validados, devolver respostas e erros bem formados |
| Intermediário | Quem já criou rotas e precisa de uma API de verdade | Dependências, middleware, banco com SQLAlchemy, async, autenticação com JWT, upload, CORS, configuração e testes |
| Avançado | Quem vai colocar a API no ar | Integrar APIs externas, paginar, fazer cache, limitar requisições e fazer o deploy |
| Projeto Blog | Quem quer ver tudo funcionando junto | Uma API completa, com PostgreSQL, usuários, autorização por dono e testes |
| Entrevistas | Quem vai ser testado sobre o assunto | Responder as perguntas mais comuns, com a explicação por trás de cada resposta |
Se você nunca programou em Python, faça antes o curso Curso de Python, ao menos até o capítulo 25. Aqui eu assumo que você sabe o que é uma função, uma classe e um import.
Como cada capítulo funciona
Todo capítulo segue o mesmo desenho: uma explicação curta, o código e o resultado dele. Três regras valem para o curso inteiro:
- A saída é real. Eu executei cada trecho e copiei o que o Python imprimiu. Para mostrar o comportamento de uma rota sem precisar de um servidor rodando, os exemplos chamam a API com o
TestClient, que faz a requisição em memória, exatamente como o Swagger ou ocurlfariam. - Os exercícios têm solução. Tente primeiro. A solução fica recolhida e termina com
assert, então você descobre sozinho se acertou. - Cada bloco diz onde está. No topo de cada trecho aparece o arquivo e as linhas do repositório (por exemplo,
basico/cap08_crud_tarefas.py), e você pode executá-lo sozinho. - Eu corrijo o que ficou desatualizado. Alguns materiais populares sobre FastAPI ensinam práticas que hoje quebram ou são inseguras. Quando isso acontece, eu mostro o problema com um teste real e a forma atual de resolvê-lo.
Versões que o curso assume
O curso assume Python 3.10 ou superior (o FastAPI atual exige isso, e não o 3.8 que aparece em materiais antigos), FastAPI 0.142, Pydantic 2 e SQLAlchemy 2. Para o código dos capítulos:
uv init minha-api
cd minha-api
uv add "fastapi[standard]"
uv add --dev pytest httpx2
O extra [standard] instala o servidor (uvicorn), o comando fastapi e as dependências usadas em formulários e upload. O httpx2 é o cliente HTTP que o TestClient usa nos testes. Com o httpx antigo, o TestClient funciona, mas emite um aviso de descontinuação.
O repositório
O código do curso está em um repositório, com um arquivo executável por capítulo e o projeto do blog completo, organizado pelos mesmos níveis do curso:
fastapi-notes/
README.md
pyproject.toml
docs/
fastapi-notes.html
basico/
intermediario/
avancado/
projeto_blog/
blog_api/
entrevistas/
Cada pasta de nível tem um README.md (objetivo, ambiente, contrato das rotas) e um roteiro de gravação. Para começar, a partir da raiz do repositório:
uv venv
uv sync
uv run basico/cap01_introducao.py
Uma regra que eu repito neste curso
Tudo o que entra na API é desconhecido até ser validado, e tudo o que sai é uma decisão sua. O FastAPI faz a primeira parte por você, a partir dos tipos. A segunda parte (o que você devolve: nada de senhas, nada de erros disfarçados de sucesso) é responsabilidade sua, e boa parte deste curso é sobre ela.