Exemplo de projeto com FastAPI e SQLModel usando async/await utilizado no mundo real.
Meu desejo é apresentar um motor de API REST utilizando o que considero que tem de melhor no universo Python. [MINHA OPINIÃO]
- Python ~3.12
- Poetry ~1.8.0
Segue abaixo os passos para iniciar a aplicação.
Passos 1, 2 e 3 precisam ser executados somente na primeira vez.
Na primeira vez é necessario instalar todas as dependencias executando o seguinte comando:
poetry installCriar o arquivo .env na raiz do projeto com:
db_url=sqlite+aiosqlite:///database.db
db_debug=1
token_secret_key=09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7Preparar o banco de dados para o uso:
poetry run migrateIniciar a aplicação (modo watch):
poetry run serverApós iniciado, o OpenAPI Specification da aplicação estará disponivel em 2 endpoints:
Para executar os comandos a seguir, é necessario ter as dependencias instaladas.
poetry run lintpoetry run unit_testpoetry run buildSão executados: validação de codigo e testes unitarios.
Iniciar a aplicação com o comando:
docker compose up| Será feito o build caso seja a primeira vez.
Executar os scripts de migração com o seguinte comando:
docker exec -it fastapi-realword-api bash -c 'DB_ROOT_URL="postgresql+psycopg://postgres:docker@fastapi-realword-db:5432/fastapi" alembic upgrade head'Os manifestos deste projeto foram desenvolvidos e testados utilizando microK8s.
kubectl create namespace realworld- Criar namespace:
kubectl apply -f k8s/common
- Criar e configurar o banco de dados:
kubectl apply -f k8s/db
Assim que o banco estiver ativo, criar um port-forward para acessar o banco de dados:
kubectl -n realworld port-forward pod/postgres-deploy 5432:5432| pod/postgres-deploy é um exemplo de nome para o pod.
Com sua IDE favorita do Postgres, execute os seguintes comandos:
CREATE DATABASE fastapi;
CREATE USER fastapi_user WITH PASSWORD '123456';
GRANT CONNECT ON DATABASE fastapi TO fastapi_user;
GRANT USAGE ON SCHEMA public TO fastapi_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO fastapi_user;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO fastapi_user;
GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO fastapi_user;- Iniciar API:
kubectl apply -f k8s/api
- Executar as migrações:
kubectl -n realworld exec pod/fastapi-deploy -- bash -c 'DB_ROOT_URL="postgresql+psycopg://postgres:docker@postgres-service.realworld.svc.cluster.local:5432/fastapi" alembic upgrade head'| pod/fastapi-deploy é um exemplo de nome para o pod.
api: fastapi-service.realworld.svc.cluster.local:3000
db: postgres-service.realworld.svc.cluster.local:5432microk8s enable dashboard
microk8s enable dns
microk8s enable registry
microk8s enable ingresskubectl -n realworld run mycurlpod --image=curlimages/curl -i --tty -- shexecute o comando:
curl -i http://fastapi-service.realworld.svc.cluster.local:4000/docs
Todas as notas de alteração deste projeto serão documentados no CHANGELOG.md.