graphql-execute

Use a política " graphql-execute para executar uma consulta GraphQL usando subconsultas.

Suporte de gateway

Tabela 1. Tabela que mostra quais gateways suportam esta política e a versão correspondente da política
Gateway Versão da política
DataPower® API Gateway 2.2.0.0DataPower API Gateway versão 10.0.4.0 e posterior)

2.2.1.0DataPower API Gateway versão 10.5.2.0 e posterior)

Este tópico descreve como configurar a política na sua fonte do ` OpenAPI `; para obter detalhes sobre como configurar a política na interface de usuário do assembly, consulte GraphQL Execute.

Sobre

A política " graphql-execute executa uma consulta GraphQL usando subconsultas. A política divide a consulta original GraphQL em diferentes subconsultas que podem ser processadas de diferentes maneiras. A política " graphql-execute suporta as seguintes quatro subconsultas diferentes como alvos:
  1. root; contém a consulta GraphQL principal que você deseja invocar no backend.
  2. __introspection; contém a consulta de introspecção que pode ser processada localmente no ' DataPower API Gateway sem a necessidade de chamar o backend.
  3. __rateLimit; contém a consulta ' __rateLimit que especifica os diferentes dados de limite de taxa que você deseja receber.
  4. __cost; contém a consulta ' __cost que especifica os diferentes dados de custo que você deseja receber. Essa consulta deve estar no formato especificado na especificação das Diretrizes de Custo do IBM GraphQL; consulte “Introspeção dos resultados da análise de custos”: __cost.
As metas " root, " __rateLimit e " __introspection podem ser executadas em qualquer ordem ou ao mesmo tempo. O alvo ' __cost pode ser executado a qualquer momento se nenhum dado de resposta for esperado. Se forem esperados dados de resposta, o destino " __cost será executado após o destino " root para retornar com precisão os dados corretos de custo de resposta. Depois que todos os alvos são executados, a política " graphql-execute combina todas as respostas. Para permitir que as respostas dos alvos individuais sejam corretamente mescladas entre si em uma única resposta final, a política " graphql-execute deve incluir todos os tipos de introspecção associados a cada nível dos dados de resposta.
A política " graphql-execute tem o seguinte formato:
- graphql-execute:
    version: version
    title: title
    description: description
    targets: 
      - execute: []
        catch:
        - execute: []
          otherwise: []

Propriedades

Tabela 2. graphql-execute propriedades da política
Propriedade Obrigatório Descrição Tipo de dados
version True O número da versão da política. sequência
title Não O título da política. sequência
description Não Uma descrição da política. sequência
targets Não Os alvos para as subconsultas. Os valores válidos são:
  • root; contém a consulta GraphQL principal que você deseja invocar no backend.
  • __introspection; contém a consulta de introspecção que pode ser processada localmente no ' DataPower API Gateway sem a necessidade de chamar o backend.
  • __rateLimit; contém a consulta ' __rateLimit que especifica os diferentes dados de limite de taxa que você deseja receber.
  • __cost; contém a consulta ' __cost que especifica os diferentes dados de custo que você deseja receber. Essa consulta deve estar no formato especificado na especificação das Diretrizes de Custo do IBM GraphQL; consulte “Introspeção dos resultados da análise de custos”: __cost.
sequência

Exemplo

O exemplo a seguir mostra uma política " graphql-execute que inclui todos os alvos disponíveis.
                          - graphql-execute:
                              title: GraphQL execute
                              version: 2.1.0
                              allowCostIntrospection: false
                              targets:
                                - target: root
                                  execute:
                                    - validate:
                                        input: message
                                        version: 2.7.0
                                        validate-against: graphql
                                        description: >-
                                          Validate the GraphQL query and analyze
                                          the expected cost
                                        title: validate & analyze
                                    - ratelimit:
                                        version: 2.4.0
                                        title: ratelimit expected
                                        description: >-
                                          Consume expected cost of query from rate
                                          limits
                                        rate-limit:
                                          - name: graphql-type-cost
                                            operation: consume
                                          - name: graphql-field-cost
                                            operation: consume
                                        burst-limit: []
                                        source: plan-named
                                    - invoke:
                                        cache-ttl: 900
                                        graphql-send-type: detect
                                        parameter-control:
                                          type: allowlist
                                          values: []
                                        http-version: HTTP/1.1
                                        header-control:
                                          type: allowlist
                                          values:
                                            - User-Agent
                                            - X-Client-IP
                                            - X-Global-Transaction-ID
                                            - Content-Type
                                        chunked-uploads: true
                                        verb: keep
                                        stop-on-error:
                                          - ConnectionError
                                          - SOAPError
                                          - OperationError
                                        websocket-upgrade: false
                                        description: Invoke the backend GraphQL server
                                        compression: false
                                        title: graphql-invoke
                                        target-url: >-
                                          https://swapi-graphql.netlify.app/.netlify/functions/index
                                        backend-type: graphql
                                        version: 2.3.0
                                        cache-response: protocol
                                        timeout: 60
                                    - parse:
                                        title: parse
                                        version: 2.0.0
                                        description: >-
                                          Parse the response from the GraphQL
                                          backend server
                                        parse-settings-reference:
                                          default: apic-default-parsesettings
                                    - validate:
                                        input: message
                                        version: 2.7.0
                                        validate-against: graphql
                                        description: >-
                                          Validate the returned JSON and analyze
                                          the real cost
                                        title: validate & analyze
                                    - ratelimit:
                                        version: 2.4.0
                                        title: ratelimit actual
                                        description: >-
                                          Replenish over-estimated cost
                                          (determined from response) to rate
                                          limits
                                        rate-limit:
                                          - name: graphql-type-cost
                                            operation: replenish
                                          - name: graphql-field-cost
                                            operation: replenish
                                        burst-limit: []
                                        source: plan-named
                                  catch:
                                    - execute: []
                                      errors:
                                        - ConnectionError
                                - target: __introspection
                                  execute:
                                    - ratelimit:
                                        source: plan-named
                                        version: 2.4.0
                                        description: >-
                                          Apply design-time rate limit for
                                          introspection query
                                        title: ratelimit design-time
                                        burst-limit: []
                                        rate-limit:
                                          - operation: consume
                                            name: graphql-design-request
                                    - validate:
                                        input: message
                                        version: 2.7.0
                                        validate-against: graphql
                                        description: >-
                                          Validate the GraphQL query and analyze
                                          the expected cost
                                        title: validate & analyze
                                    - graphql-introspect:
                                        input: message
                                        version: 2.0.0
                                        description: >-
                                          Introspect the GraphQL schema using the
                                          query
                                        title: graphql-introspect
                                - target: __rateLimit
                                  execute:
                                    - ratelimit:
                                        version: 2.4.0
                                        title: ratelimit design-time
                                        description: >-
                                          Apply design-time rate limit for
                                          ratelimitinfo
                                        rate-limit:
                                          - name: graphql-design-request
                                            operation: consume
                                        burst-limit: []
                                        source: plan-named
                                    - validate:
                                        version: 2.7.0
                                        validate-against: graphql
                                        title: validate & analyze
                                        input: message
                                        description: Validate the GraphQL query
                                    - ratelimitinfo:
                                        version: 2.0.0
                                        title: ratelimitinfo
                                        input: message
                                - target: __cost
                                  execute:
                                    - ratelimit:
                                        version: 2.4.0
                                        title: ratelimit design-time
                                        description: >-
                                          Apply design-time rate limit for
                                          ratelimitinfo
                                        rate-limit:
                                          - name: graphql-design-request
                                            operation: consume
                                        burst-limit: []
                                        source: plan-named
                                    - validate:
                                        version: 2.7.0
                                        title: validate & analyze
                                        input: message
                                        validate-against: graphql
                                        description: Validate the GraphQL query
                                    - graphql-cost-analysis:
                                        version: 2.0.0
                                        title: graphql cost analysis
                                        input: message
                                        target: graphql_execute_args