graphql-execute

Utilizzare il criterio 'graphql-execute per eseguire una query GraphQL utilizzando le sottoquery.

Supporto gateway

Tabella 1. Tabella che indica quali gateway supportano questa politica e la versione corrispondente della politica
Gateway Versione della politica
DataPower® API Gateway 2.2.0.0DataPower API Gateway versione 10.0.4.0 e successive)

2.2.1.0DataPower API Gateway versione 10.5.2.0 e successive)

In questa sezione viene descritto come configurare il criterio nella fonte " OpenAPI "; per ulteriori dettagli su come configurare il criterio nell'interfaccia utente di Assembly, consultare GraphQL Execute.

Informazioni su

Il criterio 'graphql-execute esegue una query GraphQL utilizzando delle sottoquery. Il criterio divide la query GraphQL originale in diverse sotto-query che possono essere elaborate in modi diversi. Il criterio 'graphql-execute supporta le seguenti quattro diverse sotto-query come target:
  1. root; contiene la query GraphQL principale che si vuole invocare nel backend.
  2. __introspection; contiene la query di introspezione che può essere elaborata localmente su 'DataPower API Gateway senza dover invocare il backend.
  3. __rateLimit; contiene la query '__rateLimit che specifica i diversi dati di limite di velocità che si desidera ricevere.
  4. __cost; contiene la query '__cost che specifica i diversi dati di costo che si desidera ricevere. Questa query deve rispettare il formato specificato nella specifica " IBM " ( GraphQL ) relativa alle direttive sui costi; si veda "Introspection of Cost Analysis Results": __cost.
Gli obiettivi " root, " __rateLimit e " __introspection possono essere eseguiti in qualsiasi ordine o contemporaneamente. Il target '__cost può essere eseguito in qualsiasi momento se non sono previsti dati di risposta. Se sono previsti dati di risposta, il target '__cost viene eseguito dopo il target 'root per restituire con precisione i dati corretti sul costo della risposta. Dopo l'esecuzione di tutti gli obiettivi, il criterio " graphql-execute combina insieme tutte le risposte. Per consentire la corretta fusione delle risposte dei singoli target in un'unica risposta finale, la politica " graphql-execute deve includere tutti i tipi di introspezione associati a ciascun livello dei dati di risposta.
Il criterio " graphql-execute ha il seguente formato:
- graphql-execute:
    version: version
    title: title
    description: description
    targets: 
      - execute: []
        catch:
        - execute: []
          otherwise: []

Proprietà

Tabella 2. graphql-execute proprietà delle politiche
Proprietà Obbligatorio Descrizione Tipo di dati
version Vero Il numero di versione del criterio. stringa
title N Il titolo della polizza. stringa
description N Una descrizione della politica. stringa
targets N Gli obiettivi delle sotto-query. I valori validi sono:
  • root; contiene la query GraphQL principale che si vuole invocare nel backend.
  • __introspection; contiene la query di introspezione che può essere elaborata localmente su 'DataPower API Gateway senza dover invocare il backend.
  • __rateLimit; contiene la query '__rateLimit che specifica i diversi dati di limite di velocità che si desidera ricevere.
  • __cost; contiene la query '__cost che specifica i diversi dati di costo che si desidera ricevere. Questa query deve rispettare il formato specificato nella specifica " IBM " ( GraphQL ) relativa alle direttive sui costi; si veda "Introspection of Cost Analysis Results": __cost.
stringa

Esempio

L'esempio seguente mostra un criterio " graphql-execute che include tutti i target disponibili.
                          - 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