Ir para o conteúdo

FastAPI do ZERO

Caso prefira ver a apresentação do curso em vídeo

Esse aula ainda não está disponível em formato de vídeo, somente em texto ou live!

Aula Slides

Esse material passa por atualizações periódicas. Você pode acompanhar as notas de alterações aqui.

Olá, boas-vindas ao curso de FastAPI!

A nossa intenção neste curso é facilitar o aprendizado no desenvolvimento de APIs usando o FastAPI. Vamos explorar como integrar bancos de dados, criar testes e um sistema básico de autenticação com JWT. Tudo isso para oferecer uma boa base para quem quer trabalhar com desenvolvimento web com Python. A ideia desse curso é apresentar os conceitos de forma prática, construindo um projeto do zero e indo até a sua fase de produção.

O que é FastAPI?

FastAPI é um framework Python moderno, projetado para simplicidade, velocidade e eficiência. A combinação de diversas funcionalidades modernas do Python, como anotações de tipo e suporte à concorrência. Simplificando o desenvolvimento de APIs.

Sobre o curso

Este curso foi desenvolvido para oferecer uma experiência prática no uso do FastAPI. O objetivo é que você obtenha uma compreensão das funcionalidades do FastAPI e de boas práticas associadas a ele.

O projeto central do curso será a construção de um gerenciador de tarefas (uma lista de tarefas), começando do zero. Esse projeto incluirá a implementação da autenticação do usuário e das operações CRUD completas.

Para a construção do projeto, serão utilizadas as versões mais recentes das ferramentas, disponíveis em 2025, como a versão 0.115 do FastAPI, a versão 2.0+ do Pydantic, a versão 2.0+ do SQLAlchemy ORM, além do Python 3.11/3.12/3.13 e do Alembic para gerenciamento de migrações.

Além da construção do projeto, o curso também incluirá a prática de testes, utilizando o pytest. Essa abordagem planeja garantir que as APIs desenvolvidas sejam não somente funcionais, mas também robustas e confiáveis.

O que você vai aprender?

Aqui está uma visão geral dos tópicos que abordaremos neste curso:

  1. Configuração do ambiente e gerenciamento de um projeto Python: começaremos do zero, configurando o ambiente de desenvolvimento. Escolheremos ferramentas adequadas, aplicaremos boas práticas na construção de projetos e integraremos um gerenciador de projetos, task manager, ferramentas de análise estática e formatação de código.

  2. Primeiros Passos com FastAPI: introduziremos os conceitos do desenvolvimento web com FastAPI, ensinando como criar endpoints, realizar operações CRUD, aplicar injeção de dependência, criar schemas e outros fundamentos.

  3. Modelagem de Dados com Pydantic, SQLAlchemy e Alembic: aprenderemos a criar e manipular modelos de dados utilizando Pydantic e SQLAlchemy, além de configurar um esquema de migrações de banco de dados utilizando Alembic.

  4. Programação Assíncrona: a partir da metade do curso, focaremos em tornar nosso projeto totalmente assíncrono, aproveitando os recursos do FastAPI e do SQLAlchemy para operações mais eficientes e escaláveis.

  5. Autenticação e Autorização em FastAPI: construiremos um sistema completo de autenticação para proteger nossas rotas e garantir que apenas usuários autenticados tenham acesso a dados e funcionalidades específicas.

  6. Foco em testes: faremos uma introdução detalhada ao desenvolvimento orientado a testes, utilizando pytest e coverage, e aprenderemos a configurar um pipeline de integração contínua com GitHub Actions para garantir a qualidade do código.

  7. Conteinerizando e Fazendo Deploy de sua Aplicação FastAPI: por fim, aprenderemos a criar um container Docker para nossa aplicação FastAPI e realizaremos o deploy utilizando Fly.io, preparando a aplicação para produção.

💰 Esse curso é gratuito?

SIM! Esse curso foi todo desenvolvido de forma aberta e com a ajuda financeira de pessoas incríveis. Caso você sinta vontade de contribuir, você pode me pagar um café por pix (pix.dunossauro@gmail.com) ou apoiar a campanha recorrente de financiamento coletivo da live de python que é o que paga as contas aqui de casa.

Onde o curso será disponibilizado?

Esse material será disponibilizado em duas formas diferentes:

  1. Em livro texto: todo o material está disponível nessa página;
  2. Em aulas síncronas ao vivo: para quem prefere o compromisso de acompanhar em grupo.

Pré-requisitos

Para aproveitar ao máximo este curso, é recomendado que você já tenha algum conhecimento prévio em python. Se pudesse listar o que considero importante para não se perder, os tópicos em python importantes são:

  • O funcionamento de funções: como criar e usar (referência);
  • O funcionamento das estruturas de dados: como listas, dicionários, etc.;
  • Uma pitada sobre objetos: saber o que são métodos e atributos (referência);
  • Classes de dados: o funcionamento básico das dataclasses (referência).

As referências servem como base caso você ainda não tenha estudado esses assuntos.

Alguns outros tópicos não relativos a python também serão abordados. Então, é interessante que você tenha algum entendimento básico sobre:

  • Desenvolvimento Web e APIs RESTful: não essencial, pois iremos abordar, mas quanto mais você souber, melhor para acompanhar.
  • Banco de dados / SQL: Um conhecimento básico sobre criação e busca de dados usando SQL já é suficiente, embora esse tópico também seja como o anterior, quanto mais você souber, melhor.
  • Git: não nos aprofundaremos nesse tópico durante o curso, mas usaremos operações elementares de git (como commit e push).
  • Docker: também não nos aprofundaremos nesse tópico e ele só será abordado nas aulas finais. Mas, também, só usaremos comandos básicos de docker e docker-compose.
Caso esteja iniciando seus estudos em Python!

Caso você ainda não se sinta uma pessoa preparada, ou caiu aqui sem saber exatamente o que esperar. Temos um pequeno curso introdutório. Destinado aos primeiros passos com python.

Link direto

Também temos uma live focada em dicas para iniciar os estudos em python

Link direto

Ou então a leitura do livro Pense em python

Aulas

  1. Configurando o Ambiente de Desenvolvimento
  2. Introdução ao desenvolvimento WEB
  3. Estruturando seu Projeto e Criando Rotas CRUD
  4. Configurando Banco de Dados e Gerenciando Migrações com Alembic
  5. Integrando Banco de Dados a API
  6. Autenticação e Autorização
  7. Refatorando a Estrutura do Projeto
  8. Tornando o projeto assíncrono
  9. Tornando o sistema de autenticação robusto
  10. Criando Rotas CRUD para Tarefas
  11. Dockerizando a nossa aplicação e introduzindo o PostgreSQL
  12. Automatizando os testes com integração contínua
  13. Fazendo o deploy no Fly.io
  14. Despedida e próximos passos

Após todas as aulas, se você sentir que ainda quer evoluir mais e testar seus conhecimentos, temos um projeto final para avaliar o quanto você aprendeu.

🦖 Quem vai ministrar essas aulas?

Prazer! Eu me chamo Eduardo. As pessoas me conhecem na internet como @dunossauro.

Uma fotografia minha, Dunossauro, sentado em um banco com um por do sol ao fundo

Sou um programador Python muito apaixonado e curioso. Toco um projeto pessoal semanal chamado Live de Python há quase 8 anos. Onde conversamos sobre tudo e mais um pouco quando o assunto é Python.

Adoro escrever (estamos aqui, não é mesmo?), programar coisas malucas, fazer música com programação e papear sobre software livre, computabilidade e IndieWeb.

Tô sempre pela web e nos eventos de Python, a gente pode se conectar nessa imensa rede mundial de computadores. Meus links!.

🧐 Revisão e contribuições

Esse material contou com a revisão e contribuições inestimáveis de pessoas incríveis:

@adorilson, @aguynaldo, @alphabraga, @andrespp, @azmovi, @bugelseif, @FtxDante, @gabrielhardcore, @gbpagano, @henriqueccda, @henriquesebastiao, @ig0r-ferreira, @itsGab, @ivansantiagojr, @jlplautz, @jonathanscheibel, @jpsalviano, @julioformiga, @KennedyRichard, @lbmendes, @lucasmpavelski, @lucianoratamero, @marythealice, @matheusalmeida28, matheussricardoo, @me15degrees, @mmaachado, @NatalNW7, @raiguilhermems, @rennerocha, @ricardo-emanuel01, @rodbv, @rodrigosbarretos, @taconi, @ThiagoEidi, @wanderleihuttel, @williangl, @vcwild, @vdionysio

Muito obrigado! ❤

📖 Licença

Todo esse curso foi escrito e produzido por Eduardo Mendes (@dunossauro).

Todo esse material é gratuito e está sob licença Creative Commons BY-NC-SA. O que significa que:

  • Você pode copiar e reproduzir esse material em qualquer meio e em qualquer formato;
  • Você pode adaptar esse material e construir outros materiais usando esse material.

Pontos de atenção:

  • Você precisa dar os devidos créditos a esse material onde for usar ou adaptar;
  • Você não pode usar para fins comerciais. Como vender ou usar para obter vantagens comerciais;
  • Todo o material derivado desse material deve ser redistribuído com a licença CC BY-NC-SA.

🧰 Ferramentas necessárias para acompanhar o curso

  1. Um editor de texto ou IDE de sua escolha. Estou usando o GNU/Emacs enquanto escrevo as aulas;
  2. Um terminal. Todos os exemplos do curso são executados e explicados no terminal. Você pode usar o que se sentir mais a vontade e for compatível com seu sistema operacional;
  3. Ter o interpretador Python instalado em uma versão igual ou superior a 3.11
  4. Uma conta no Github: para podermos testar com Github Actions;
  5. Uma conta no Fly.io: ferramenta que usaremos para fazer deploy.

🔧 Ferramentas de apoio

Toda essa página foi escrita em markdown usando as seguintes bibliotecas:

  • MkDocs: Para geração das páginas estáticas usando Markdown
  • Mkdocs-material: Tema para o MkDocs
  • pymdown-extensions: Extensões para MkDocs, como emojis, diagramas e blocos estilizados de código
  • markdown-exec: Utilitários para executar snippets dinâmicos de código e adicionar o resultado em markdown
  • Python-Markdown: Extensão do Python para Markdown
  • Mkdocs-video: Extensão para o MkDocs exibir os vídeos na página
  • Mermaid.js: Construção dos diagramas
  • Glaxnimate: Para criar a animação no topo dessa página
  • Lottie-Player: Para exibir a animação do Glaxnimate

Para os slides:

📁 Repositório

O versionamento de tudo está sendo feito no repositório do curso Github.

🚀 Deploy

Os deploys das páginas estáticas geradas pelo MkDocs estão sendo feitos no Netlify

Conclusão

Neste curso, a intenção é fornecer uma compreensão completa do framework FastAPI, utilizando-o para construir uma aplicação de gerenciamento de tarefas. O aprendizado será focado na prática, e cada conceito será acompanhado por exemplos e exercícios relevantes.

A jornada começará com a configuração do ambiente de desenvolvimento e introdução ao FastAPI. Ao longo das aulas, abordaremos tópicos como autenticação, operações CRUD, testes com pytest e deploy. A ênfase será colocada na aplicação de boas práticas e no entendimento das ferramentas e tecnologias atualizadas, incluindo as versões mais recentes do FastAPI, Pydantic, SQLAlchemy ORM, Python e Alembic.

Este conteúdo foi pensado para auxiliar na compreensão de como criar uma API eficiente e confiável, dando atenção a aspectos importantes como testes e integração com banco de dados.

Nos vemos na primeira aula. ❤

F.A.Q.

Perguntas frequentes que me fizeram durante os vídeos: