Skip to content

douglaspands/fastapi-realworld-api

Repository files navigation

fastapi-realworld-api [EM DESENVOLVIMENTO]

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]

Requerimentos

  • Python ~3.12
  • Poetry ~1.8.0

Como usar

Segue abaixo os passos para iniciar a aplicação.

Passos 1, 2 e 3 precisam ser executados somente na primeira vez.

1. Instalar dependencias

Na primeira vez é necessario instalar todas as dependencias executando o seguinte comando:

poetry install

2. Criar arquivo .env

Criar o arquivo .env na raiz do projeto com:

db_url=sqlite+aiosqlite:///database.db
db_debug=1
token_secret_key=09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7

3. Executar migrações

Preparar o banco de dados para o uso:

poetry run migrate

4. Iniciar aplicação

Iniciar a aplicação (modo watch):

poetry run server

Após iniciado, o OpenAPI Specification da aplicação estará disponivel em 2 endpoints:

Qualidade

Para executar os comandos a seguir, é necessario ter as dependencias instaladas.

Validação de código (Linter)

poetry run lint

Testes unitarios

poetry run unit_test

Build

poetry run build

São executados: validação de codigo e testes unitarios.

Docker-Compose

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'

Kubernetes

Os manifestos deste projeto foram desenvolvidos e testados utilizando microK8s.

Namespaces

kubectl create namespace realworld

Iniciar

  1. Criar namespace:
kubectl apply -f k8s/common
  1. 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;
  1. Iniciar API:
kubectl apply -f k8s/api
  1. 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.

DNS

api: fastapi-service.realworld.svc.cluster.local:3000
db: postgres-service.realworld.svc.cluster.local:5432

Dicas

MicroK8s? Serviços que precisam ser iniciados

microk8s enable dashboard
microk8s enable dns
microk8s enable registry
microk8s enable ingress

Verificar DNS da API

kubectl -n realworld run mycurlpod --image=curlimages/curl -i --tty -- sh

execute o comando:

curl -i http://fastapi-service.realworld.svc.cluster.local:4000/docs

Changelog

Todas as notas de alteração deste projeto serão documentados no CHANGELOG.md.

About

Exemplo de projeto utilizado no mundo real.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages