Utilização de GraphQL no Odoo: Otimização de APIs e Reduç...

August 15, 2025 by
Utilização de GraphQL no Odoo: Otimização de APIs e Reduç...
OdooBot

Utilização de GraphQL no Odoo: Otimização de APIs e Redução de Latência

Resumo:
Descubra como integrar o GraphQL no Odoo para criar APIs mais flexíveis, com menor latência e maior eficiência. Este guia prático em Português de Portugal inclui passos para criar um módulo, definir schemas, implementar resolvers e executar queries que, por exemplo, somam valores diretamente na resposta.


1. Porquê GraphQL no Odoo?

  • Flexibilidade de Queries: Permite ao cliente escolher exatamente os campos desejados.
  • Menor Latência: Uma única chamada HTTP pode substituir vários endpoints REST.
  • Documentação Automática: Schemas auto-dokumentam-se, facilitando o trabalho da equipa de front-end.
  • Ferramentas Ecosistema: GraphiQL, Apollo Client, entre outras.

“Integrar GraphQL no Odoo é um passo estratégico para quem procura APIs mais ágeis e customizáveis.”
– Equipa OpenCloud


2. Pré-requisitos

  1. Odoo 16+
  2. Python 3.8+
  3. Conhecimentos básicos de módulos Odoo
  4. Biblioteca Ariadne para GraphQL:
    bash pip install ariadne

3. Estrutura do Módulo

bash addons/ └── odoo_graphql ├── __init__.py ├── __manifest__.py ├── schema.graphql ├── resolvers.py └── controllers/ └── graphql_controller.py

3.1 manifest.py

python { 'name': 'Odoo GraphQL API', 'version': '1.0', 'category': 'Tools', 'summary': 'Exposição de API GraphQL para Odoo', 'depends': ['base'], 'data': [], 'installable': True, }


4. Definir o Schema GraphQL

arquivo schema.graphql:

```graphql type Query { product(id: ID!): Product sumOrderLines(orderId: ID!): Float }

type Product { id: ID! name: String! list_price: Float! }

type OrderLine { id: ID! product_id: ID! price_unit: Float! product_uom_qty: Float! }

schema { query: Query } ```


5. Implementar Resolvers

arquivo resolvers.py:

```python from ariadne import QueryType from odoo import api, SUPERUSER_ID

query = QueryType()

@query.field("product") def resolve_product(_, info, id): env = info.context["env"] product = env['product.product'].browse(int(id)) return { "id": product.id, "name": product.name, "list_price": product.list_price, }

@query.field("sumOrderLines") def resolve_sum_order_lines(_, info, orderId): env = info.context["env"] lines = env['sale.order.line'].search([('order_id', '=', int(orderId))]) total = sum(lines.mapped('price_unit') * lines.mapped('product_uom_qty')) return total ```


6. Criar o Controller HTTP

arquivo controllers/graphql_controller.py:

```python from odoo import http, api from odoo.http import request from ariadne import load_schema_from_path, make_executable_schema, graphql_sync, snake_case_fallback_resolvers

Carregar schema

type_defs = load_schema_from_path(file.replace('controllers/graphql_controller.py', '../schema.graphql')) from ..resolvers import query

schema = make_executable_schema(type_defs, query, snake_case_fallback_resolvers)

class GraphQLController(http.Controller):

@http.route('/graphql', auth='user', type='json', methods=['POST'])
def graphql(self, **data):
    context = {
        "env": request.env(user=SUPERUSER_ID)
    }
    success, result = graphql_sync(
        schema,
        data,
        context_value=context,
        debug=True
    )
    status = 200 if success else 400
    return request.make_response(result, headers=[('Content-Type', 'application/json')], status=status)

```


7. Testar a API GraphQL

  1. Aceda a GraphiQL no URL:
    https://<seu-odoo>/graphql
  2. Execute a query de exemplo:

graphql query { product(id: "1") { name list_price } sumOrderLines(orderId: "10") }

Resultado esperado: json { "data": { "product": { "name": "Laptop Pro", "list_price": 2499.0 }, "sumOrderLines": 5178.0 } }


8. Boas Práticas de Performance

  • Batching & Caching: Utilize DataLoaders para reduzir chamadas múltiplas.
  • Limit & Offset: Permita paginação nas queries que retornam listas.
  • Autenticação JWT: Substitua auth='user' por um esquema seguro com tokens.
  • Monitorização: Integre com ferramentas como Prometheus ou Elastic APM.

9. Conclusão

Integrar GraphQL no Odoo traz maior desempenho, flexibilidade e facilidade de manutenção. Quer optimizar ainda mais as suas APIs? A equipa da OpenCloud ajuda-o a implementar soluções avançadas e escaláveis em Odoo:
- Visite www.opencloud.pro
- Saiba mais sobre a nossa parceria oficial com a Odoo em:
https://www.odoo.com/partners/opencloud-unipessoal-lda-12774

Pronto para dar o próximo passo? Contacte-nos e transforme as suas integrações Odoo com GraphQL!