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!
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 a concorrência, facilitando o desenvolvimento de APIs.
Sobre o curso
Este curso foi desenvolvido para oferecer uma experiência prática no uso do FastAPI, uma das ferramentas mais modernas para construção de APIs. Ao longo do curso, 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 2024, 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 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 apenas 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:
-
Configuração do ambiente de desenvolvimento para FastAPI: começaremos do absoluto zero, criando e configurando nosso ambiente de desenvolvimento.
-
Primeiros Passos com FastAPI e Testes: após configurar o ambiente, mergulharemos na estrutura básica de um projeto FastAPI e faremos uma introdução detalhada ao Test Driven Development (TDD).
-
Modelagem de Dados com Pydantic e SQLAlchemy: aprenderemos a criar e manipular modelos de dados utilizando Pydantic e SQLAlchemy, dois recursos que levam a eficiência do FastAPI a outro nível.
-
Autenticação e Autorização em FastAPI: construiremos um sistema de autenticação completo, para proteger nossas rotas e garantir que apenas usuários autenticados tenham acesso a certos dados.
-
Testando sua Aplicação FastAPI: faremos uma introdução detalhada aos testes de aplicação FastAPI, utilizando as bibliotecas pytest e coverage. Além de executá-los em um pipeline de integração contínua com github actions.
-
Dockerizando e Fazendo Deploy de sua Aplicação FastAPI: por fim, aprenderemos como "dockerizar" nossa aplicação FastAPI e fazer seu deploy utilizando Fly.io.
💰 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 de três formas diferentes:
-
Em livro texto: todo o material está disponível nessa página;
-
Em aulas síncronas ao vivo: para quem prefere o compromisso de acompanhar em grupo. Datas já disponíveis;
Playlist das Aulas síncronas (Ao vivo):
-
Em formato de vídeo (assíncronas): todas as aulas serão disponibilizadas em formato de vídeo em meu canal do YouTube para quem prefere assistir ao ler. (Vídeos ainda não disponíveis)
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 e 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 o 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á o 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 básicas 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.
Também temos uma live focada em dicas para iniciar os estudos em python
Ou então a leitura do livro Pense em python
Aulas
- Configurando o Ambiente de Desenvolvimento
- Introdução ao desenvolvimento WEB
- Estruturando seu Projeto e Criando Rotas CRUD
- Configurando Banco de Dados e Gerenciando Migrações com Alembic
- Integrando Banco de Dados a API
- Autenticação e Autorização
- Refatorando a Estrutura do Projeto
- Tornando o sistema de autenticação robusto
- Criando Rotas CRUD para Tarefas
- Dockerizando a nossa aplicação e introduzindo o PostgreSQL
- Automatizando os testes com integração contínua
- Fazendo o deploy no Fly.io
- 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. Mas as pessoas me conhecem na internet como @dunossauro.
Sou um programador Python muito empolgado e curioso. Toco um projeto pessoal chamado Live de Python há quase 7 anos. Onde conversamos sobre tudo e mais um pouco quando o assunto é Python.
Esse projeto que estamos desenvolvendo é um pedaço, um projeto, de um grande curso de FastAPI que estou montando. Espero que você se divirta ao máximo com a parte prática enquanto escrevo em mais detalhes todo o potencial teórico que lançarei no futuro!
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, @gabrielhardcore, @gbpagano, @henriqueccda, @henriquesebastiao, @ig0r-ferreira, @itsGab, @ivansantiagojr, @jlplautz, @jonathanscheibel, @julioformiga, @lbmendes, @lucasmpavelski, @lucianoratamero, @matheusalmeida28, @me15degrees, @mmaachado, @rennerocha, @ricardo-emanuel01, @rodbv, @rodrigosbarretos, @taconi, @vcwild, @williangl, @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
- Um editor de texto ou IDE de sua escolha. Estou usando o GNU/Emacs enquanto escrevo as aulas;
- 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;
- Ter o interpretador Python instalado em uma versão igual ou superior a
3.11
- Uma conta no Github: para podermos testar com Github Actions;
- Uma conta no Fly.io: ferramenta que usaremos para fazer deploy.
🔧 Ferramentas de apoio
Toda essa página foi feita 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
- 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: Pra criar a animação no topo dessa página
- Lottie-Player: Pra 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:
- Que papel de parede é esse? É uma foto do Liam Wong
- Qual o tema no shell? Todo o meu tema do Gnome foi customizado com Gradience o tema é Pretty In Purple
- Qual o tema do seu editor? Rebecca