GithubHelp home page GithubHelp logo

gillianoliveira / workoutapi Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 910 KB

Projeto reiniciado.API criada com Fastapi, Python e Docker. Em andamento. Laboratório do bootcamp Python AI Backend Developer promovido pela Vivo e pela DIO.

Makefile 1.01% Python 95.92% Mako 3.07%

workoutapi's Introduction

Desenvolvendo sua primeira API com FastAPI, Python e Docker

Bootcamp
Desafio de Projeto
Promovido por: Vivo
Plataforma: http://dio.me
Instrutora: Nayanna Nara
Status: Em andamento

SUMÁRIO:

Repositório Oficial do LAB

Repositório: https://github.com/digitalinnovationone/workout_api

Desafio

** Aguardando a conclusão da issue de ID para iniciar.***

[✔] Adicionar query parameters nos endpoints

- atleta
  - nome
  - cpf

[✔] Customizar response de retorno de endpoints

- get all
  - atleta
  - nome
  - centro_treinamento
  - categoria

[X] Manipular exceção de integridade dos dados em cada módulo/tabela

  - sqlalchemy.exc.IntegrityError e devolver a seguinte mensagem: “Já existe um atleta cadastrado com o cpf: x”
  - status_code: 303

[X] Adicionar paginação utilizando a lib: fastapi-pagination

  - limit e offset

Sobre a resolução dos desafios

Para testar:
0 - É preciso que o banco de dados esteja criado.
1 - Inicie o container Docker. Você pode usar o play do Docker Desktop.
2 - Suba o servidor uvicorn digitando make run no terminal.
3 - Acesse o cliente de sua preferência (Postman, Thunder Client, Insominia etc.) >>

Desafio 01: Adicionar query parameters nos endpoints

Link da documentação: https://fastapi.tiangolo.com/pt/tutorial/query-params/

Crie uma requisição do tipo get e cole a url a seguir na barra de endereços:

http://127.0.0.1:8000/atletas

4 - Ainda na request procure por Query Parameters a adicione os parâmetros nome e cpf com os respectivos valores que deseja filtrar. Lembre-se de escrever os dados buscados exatamente como estão no banco de dados. Caso contrário, não serão retornados. Eu usei o Thunder Client dentro do VS Code para fazer a request.

5 - Caso você queira retornar todos os atletas, basta não informar os query parameters ou desmarcá-los caso já tenha informado.

Desafio 02: Customizar response de retorno de endpoints

Criei um novo end-point chamado atleta_info para representar a solução. Ele retorna apenas o nome do atleta, o nome da categoria e o nome do centro de treinamento conforme descrito.

💻Recursos utilizados

Python 3.12.3 e ambiente virtual Venv.

FastAPI(async): framework moderno, rápido de alto desempenho, fácil de aprender, rápido de codar e pronto para produção voltado para construir APIs com Python.

uvicorn: Uvicorn é uma implementação de servidor web ASGI para Python. A especificação ASGI preenche essa lacuna e significa que agora podemos começar a construir um conjunto comum de ferramentas utilizáveis ​​em todas as estruturas assíncronas.Documentação: https://www.uvicorn.org/

alembic: Alembic é uma ferramenta de migração de banco de dados escrita pelo autor de SQLAlchemy . Uma ferramenta de migração oferece as seguintes funcionalidades. Documentação: https://alembic.sqlalchemy.org/en/latest/

SQLAlchemy: SQLAlchemy é o kit de ferramentas Python SQL e mapeador relacional de objetos que oferece aos desenvolvedores de aplicativos todo o poder e flexibilidade do SQL. SQLAlchemy fornece um conjunto completo de padrões de persistência de nível empresarial bem conhecidos, projetados para acesso eficiente e de alto desempenho ao banco de dados, adaptados em uma linguagem de domínio simples e Pythonica. Documentação: https://www.sqlalchemy.org/

pydantic: Validação de dados usando dicas de tipo Python. Artigo de referência: Pydantic: Simplifying Data Validation in Python

PostgresSQL: PostgreSQL é um poderoso sistema de banco de dados relacional de objeto de código aberto com mais de 35 anos de desenvolvimento ativo que lhe rendeu uma forte reputação de confiabilidade, robustez de recursos e desempenho.

Docker: Docker é uma plataforma de software que permite criar, implantar e gerenciar aplicações em contêineres. Um contêiner é uma unidade leve, portátil e autosuficiente que inclui tudo o que a aplicação precisa para rodar: código, runtime, bibliotecas e dependências do sistema. Ele permite o isolamento da aplicação, é portável, escalável e permite a integração com sistemas CI/CD para automatizar o desenvolvimento.

Comandos úteis

teste

Ambiente Virtual

Adicionar o pyenv ao projeto:

pyenv local 3.12.4

Criação do ambiente virtual:

py -m venv .venv

Ativação do ambiente virtual:

.venv\Scripts\activate

Desativação do ambiente virtual:

deactivate

PIP

Instalação das bibliotecas com um comando

pip install fastapi uvicorn sqlalchemy pydantic

Instalação do FastAPI:

pip install fastapi

Instalação do uvicorn:

pip install uvicorn

Instalação do SQLAlchemy

pip install sqlalchemy

Instalação do Pydantic

Já está incluído no FastAPI.

pip install pydantic
pip install pydantic-settings

Instalação do Poetry

pip install poetry

Atualizar o pip

py -m pip install --upgrade pip

Requirements

pip freeze > requirements.txt

Docker

Docker-compose em funcionamento

docker-compose up -d

Create Migrations

make create-migrations d="init_db"

Alembic

Instalação do Alembic no ambiente virtual

pip install alembic

Inicializando o Alembic

alembic init alembic

URL no alembic.ini

sqlalchemy.url = driver+asyncpg://user:senha@localhost/nome_db
  • No Alembic.ini as funções devem ser trabalhadas para se tornarem assícronas, já que por padrão são síncronas.

Instale o asyncpg

pip install asyncpg

Se a migration der certo vai ser gerado um arquivo que será armazenado na pasta alembic.

Rodar a migration (sem o Makefile)

alembic revision --autogenerate -m d="init-db"

Milestones ⭐

1 - Container rodando no Docker 2 - Tabelas no banco via migration

Referências

SQLAlchemy 2.0. Table Configuration with Declarative.Disponível em: https://docs.sqlalchemy.org/en/20/orm/declarative_tables.html. Acesso em: 30/06/2024

Dharmkar, Rajendra.How to set python environment variable PYTHONPATH on Windows?.Disponível em: https://www.tutorialspoint.com/How-to-set-python-environment-variable-PYTHONPATH-on-Windows.Acesso em: 30-06-2024.

AELMBIC DOCS. Tutorial. Disponível em: https://alembic.sqlalchemy.org/en/latest/tutorial.html. Acesso em: 01-07-2024

MICROSOFT. Makefile Tools VSCode extension. Disponível em: https://www.youtube.com/watch?v=zbi6WsscXuI. Acesso em: 01-07-2024

REID, Julia. Now announcing: Makefile support in Visual Studio Code!. Disponível em: https://devblogs.microsoft.com/cppblog/now-announcing-makefile-support-in-visual-studio-code/. Acesso em: 01-07-2024.

workoutapi's People

Contributors

gillianoliveira avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.