Pular para o conteúdo

    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.

    Por Alexsander Valente

    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.

    PartePara quemO que você sabe fazer no final
    BásicoQuem sabe Python básico e nunca fez uma APICriar rotas, receber dados validados, devolver respostas e erros bem formados
    IntermediárioQuem já criou rotas e precisa de uma API de verdadeDependências, middleware, banco com SQLAlchemy, async, autenticação com JWT, upload, CORS, configuração e testes
    AvançadoQuem vai colocar a API no arIntegrar APIs externas, paginar, fazer cache, limitar requisições e fazer o deploy
    Projeto BlogQuem quer ver tudo funcionando juntoUma API completa, com PostgreSQL, usuários, autorização por dono e testes
    EntrevistasQuem vai ser testado sobre o assuntoResponder 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 o curl fariam.
    • 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:

    Terminal
    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:

    Estrutura do repositório
    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:

    Terminal
    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.