Criando uma aplicação básica com FastAPI (parte 1)

Desenvolver esse aplicativo é ótimo para quem está aprendendo a utilizar o FastAPI. Trata-se de um sistema onde você pode armazenar, editar e consultar dados sobre drogas (remédios). Se quiser, você pode trocar esse tema por outro de sua preferência, como produtos, por exemplo.

Stack: FastAPI, Uvicorn, SQLAlchemy, Pydantic, Alembic, React

\============================================================

1 = Configurar o Poetry

Crie uma pasta para o seu projeto. Vamos utilizar o Poetry para gerenciar dependências e ambiente virtual. Se você não sabe o que é o Poetry, não sabe o que está perdendo. É uma ferramenta que facilita muito a criação de aplicações em Python, como você vai perceber por aqui.

Caso precise instalar o Poetry, esse é o comando:

pip install poetry

Agora vá até a sua pasta no terminal e digite:

poetry init

Ele vai te perguntar várias coisas no terminal, como nome do projeto, autor, etc. Se quiser, pode só dar um ok em tudo.

Veja que agora foi gerado um arquivo pyproject.toml na pasta do seu projeto, com todas as informações que você colocou (ou não) sobre ele.

\=============================================================

2 = Criar o ambiente virtual

É recomendado que você crie um ambiente virtual para o seu projeto. Basicamente, isso significa criar um ambiente isolado para ele, onde está bem claro qual é a versão de Python utilizada e quais são as dependências e demais características dele. Isso evita conflito com outros projetos que utilizam versões e pacotes diferentes.

Como temos a sorte de usar o Poetry, é bem fácil:

poetry shell

Isso toma alguns instantes. O poetry cria o ambiente virtual fora da pasta do seu projeto, enquanto outras ferramentas criam dentro dela. No terminal, ele vai te mostrar em qual lugar do seu pc ele está guardado.

Note que agora seu terminal ficou mais ou menos assim:

(newfolder-py3.11) PS C:\Users\user\OneDrive\Área de Trabalho\Newfolder>

O (new folder-py3.11) significa que o ambiente virtual está ativado. No seu caso, vai ter algum outro nome entre parênteses, e é isso. Sempre que você abrir de novo seu terminal, vai ter que reativar o ambiente virtual (caso ele não esteja). Pra isso, é só dar de novo um poetry shell.

💡
Se você esquecer de ativar o seu ambiente virtual sempre que trabalhar no seu projeto, provavelmente muitos comandos futuros não serão reconhecidos pelo terminal. É só ativá-lo novamente.

\=============================================================

3 = Instalar dependências

Dependências são, a grosso modo, ferramentas que aplicam funcionalidades que o projeto precisa. As que vamos instalar são essas listadas após o poetry add. Rode esse comando:

poetry add fastapi uvicorn sqlalchemy pydantic sqlalchemy alembic

Não se preocupe em saber o que cada uma delas faz agora. Eu vou explicar assim que as utilizarmos. Um arquivo poetry.lock vai ser gerado, deixe ele ali. Note que agora essas dependências instaladas estão listadas no pyproject.toml.

\=============================================================

4 = Criar as subpastas

Dentro dessa pasta do projeto que você já tem, crie as seguintes subpastas:

pasta_do_projeto
|
|-- app
|   |-- db
|   |-- routes
|   |-- schemas

A pasta app é onde você vai desenvolver seu app. Na pasta do projeto ficam arquivos de configuração do app, como os do Poetry, e futuramente de outros.

\=============================================================

5 = init

Muito importante: crie um arquivo __init__.py (dois underscores de cada lado) dentro de /app e cada uma de suas subpastas. Sem nada dentro, só o arquivo. Isso faz com que o sistema entenda que essa pasta é um pacote Python. Sem ele, você vai ter problemas na hora de fazer importações de uma pasta para outra.

\=============================================================

6 = main

A aplicação precisa ter um arquivo main.py, que é onde você vai importar o FastAPI e pode criar uma rota de teste para checar se está funcionando. Crie dentro da pasta /app.

from fastapi import FastAPI #importa o fastapi

app = FastAPI() #cria uma variável 'app' para "representar" o fastapi

@app.get("/teste") #cria um endpoint get para esse app
def teste(): #define a função teste...
    return {"Hello": "Mars"} # ...que vai retornar um JSON escrito {"Hello": "Mars"}

Se você é bem iniciante e está perdido, isso vai te ajudar (leia de novo se for preciso):

Endpoint: é como um local específico onde você pode fazer alguma requisição. Nesse caso, esse local é um GET, o que significa que podemos obter alguma informação dali.

Função: dentro do endpoint precisa ter alguma função que vai especificar o que ele vai retornar.

JSON: é o tipo de arquivo padrão utilizado para requisição de dados.

💡
Se você está usando o VSCode, pode ser que ele não reconheça a importação do FastAPI de primeira. Isso acontece porque ele não está lendo o main.py pelo ambiente virtual do projeto, e sim pelo Python global que você instalou no pc. Para corrigir isso, clique em Python (canto inferior direito) e selecione o ambiente virtual do seu projeto na janela que vai aparecer:

\=============================================================

6 = Testar se está funcionando

Para testar se o projeto tá rodando, dê o comando:

poetry run uvicorn app.main:app --host 0.0.0.0

O uvicorn, uma das dependências instaladas, é um servidor que hospeda a aplicação. Ele vai procurar dentro da pasta /app --> dentro do arquivo main.py --> o app que você criou. Vai aparecer algo do tipo:

Se der erro, pode ser que você não esteja na pasta raiz do seu projeto. Ou o arquivo main.py está no lugar errado (ele tem que estar dentro de /app). Você criou os __init__.py?

Se der ok, note que por padrão o uvicorn tá rodando seu app na porta 8000. Vai no seu navegador e digite http://127.0.0.1:8000/teste. Fique feliz se acontecer o seguinte:

Significa que ele retornou o esperado, que era esse Hello Mars em formato JSON. Tá funcionando.

No próximo post vamos configurar o banco de dados (SQLite) e o gerenciador de migrações (Alembic).