Este projeto é uma API GraphQL simples construída com FastAPI e Strawberry, duas ferramentas poderosas do ecossistema Python. A API permite que os usuários consultem uma lista de itens, cada um contendo um ID, username, fullName, email, role, hashedPassword, disabled, verified, createdAt.
O GraphQL é uma linguagem de consulta para APIs que oferece flexibilidade ao cliente, permitindo solicitar exatamente os dados necessários. Diferentemente do REST, onde múltiplas rotas são usadas para diferentes recursos, o GraphQL utiliza uma única rota que pode retornar diversos tipos de dados, otimizando a comunicação entre cliente e servidor.
Strawberry é uma biblioteca de GraphQL para Python que utiliza anotações de tipo para criar APIs de maneira intuitiva e moderna. Ela se integra perfeitamente com o FastAPI, permitindo criar endpoints GraphQL com facilidade. O principal componente utilizado é o GraphQLRouter, que serve como ponto de entrada para as consultas GraphQL.
- Flexibilidade: Clientes podem consultar apenas os dados necessários, reduzindo o tráfego de rede.
- Simplicidade: Com Strawberry e FastAPI, a configuração da API é direta e eficiente.
- Escalabilidade: A estrutura GraphQL facilita a adição de novos tipos de dados sem alterar a lógica existente.
- FastAPI: Um framework moderno e rápido para construir APIs com Python.
- Strawberry: Uma biblioteca para criar APIs GraphQL em Python.
- Uvicorn: Um servidor ASGI para rodar a aplicação.
Antes de começar, você precisa ter o Python 3.7 ou superior instalado em sua máquina. Você também deve ter o pip
para instalar as dependências.
git clone https://github.com/Rodrigo-Kelven/FastAPI_GraphQL
cd FastAPI_GraphQL
pip install -r requirements.txt
docker build -t api_graphql .
docker run -p 8000:8000 api_graphql
A API GraphQL pode ser acessada em http://127.0.0.1:8000/api/v1/graphql. Você pode usar a interface GraphQL para fazer consultas.
-h## Exemplo de Consulta
{
allUsers {
id
username
fullName
email
role
hashedPassword
disabled
verified
createdAt
}
}
{
"data": {
"allUsers": [
{
"id": "61476a49-6f68-4ba0-998f-07196de68abe",
"username": "string",
"fullName": "string",
"email": "user@example.com",
"role": "Role.admin",
"hashedPassword": "$2b$12$SjQvK5W9nE5UW9PnDsMRxOXqaKVG8.GRqtVIL/5ZeiAV33c5SV2M.",
"disabled": false,
"verified": 0,
"createdAt": "2025-03-10T02:22:27"
}
]
}
}
Contribuições são bem-vindas! Se você tiver sugestões ou melhorias, sinta-se à vontade para abrir um issue ou enviar um pull request.;)