Configurazione della complessità dell'esecuzione, della profondità delle query e dell'introspezione di GraphQL con AWS AppSync - AWS AppSync

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione della complessità dell'esecuzione, della profondità delle query e dell'introspezione di GraphQL con AWS AppSync

AWS AppSyncconsente di abilitare o disabilitare le funzionalità di introspezione e di impostare limiti alla quantità di livelli e resolver annidati in una singola query.

Utilizzo della funzione di introspezione

Per impostazione predefinita, GraphQL consente di utilizzare l'introspezione per interrogare lo schema stesso per scoprirne i tipi, i campi, le query, le mutazioni, le sottoscrizioni, ecc. Questa è una funzionalità importante per imparare come i dati vengono modellati ed elaborati dal servizio GraphQL. Tuttavia, ci sono alcuni aspetti da considerare quando si ha a che fare con l'introspezione. Potresti avere un caso d'uso che trarrebbe vantaggio dalla disattivazione dell'introspezione, ad esempio un caso in cui i nomi dei campi potrebbero essere riservati o nascosti o lo schema API completo è destinato a non essere documentato per i consumatori. In questi casi, la pubblicazione dei dati dello schema tramite l'introspezione potrebbe causare la fuga di dati intenzionalmente privati.

Per evitare che ciò accada, puoi disabilitare l'introspezione. Ciò impedirà a parti non autorizzate di utilizzare campi di introspezione nello schema. Tuttavia, è importante notare che l'introspezione è utile ai team di sviluppo per apprendere come vengono elaborati i dati del loro servizio. Internamente, potrebbe essere utile mantenere attiva l'introspezione e disabilitarla nel codice di produzione come ulteriore livello di sicurezza. Un altro modo per gestire questo problema è aggiungere un metodo di autorizzazione, che prevede anche. AWS AppSync Per ulteriori informazioni, vedere autorizzazione.

AWS AppSyncconsente di abilitare o disabilitare l'introspezione a livello di API. Per abilitare o disabilitare l'introspezione, procedi come segue:

  1. Accedere alla AWS Management Console e aprire la console AppSync.

  2. Nella pagina delle API, scegli il nome di un'API GraphQL.

  3. Nella home page dell'API, nel riquadro di navigazione, scegli Impostazioni.

  4. Nelle configurazioni API, scegli Modifica.

  5. In Query di introspezione, procedi come segue:

    1. Attiva o disattiva Abilita le interrogazioni di introspezione.

  6. Selezionare Salva.

Quando l'introspezione è abilitata (il comportamento predefinito), l'utilizzo del sistema di introspezione funzionerà normalmente. Ad esempio, l'immagine seguente mostra un __schema campo che elabora tutti i tipi disponibili nello schema:

GraphQL schema explorer showing query structure with types and name fields.

Quando si disabilita questa funzione, nella risposta verrà invece visualizzato un errore di convalida:

GraphQL query editor showing a validation error for undefined 'types' field in '_Schema'.

Configurazione dei limiti di profondità delle interrogazioni

Ci sono momenti in cui potresti aver bisogno di un controllo più granulare sul funzionamento dell'API durante un'operazione. Uno di questi controlli consiste nell'aggiungere un limite alla quantità di livelli annidati che una query può elaborare. Per impostazione predefinita, le interrogazioni sono in grado di elaborare un numero illimitato di livelli annidati. Limitare le interrogazioni a un determinato numero di livelli annidati ha potenziali implicazioni per le prestazioni e la flessibilità del progetto. Eseguire la seguente query:

query MyQuery { L1: nextLayer { L2: nextLayer { L3: nextLayer { L4: value } } } }

Il progetto potrebbe richiedere la limitazione delle interrogazioni a o per qualche scopo. L1 L2 Per impostazione predefinita, l'intera query da L1 a L4 verrebbe elaborata senza alcun modo per controllarla. Impostando un limite, è possibile impedire alle query di accedere a qualsiasi elemento oltre il livello specificato.

Per aggiungere un limite di profondità delle query, procedi come segue:

  1. Accedere alla AWS Management Console e aprire la console AppSync.

  2. Nella pagina delle API, scegli il nome di un'API GraphQL.

  3. Nella home page dell'API, nel riquadro di navigazione, scegli Impostazioni.

  4. Nelle configurazioni API, scegli Modifica.

  5. In Profondità della query, procedi come segue:

    1. Attiva o disattiva Abilita la profondità delle interrogazioni.

    2. In Profondità massima, imposta il limite di profondità. Questo valore può essere compreso tra 1 e75.

  6. Selezionare Salva.

Quando viene impostato un limite, il superamento del limite superiore genererà un QueryDepthLimitReached errore. Ad esempio, l'immagine seguente mostra una query con un limite di profondità 2 che consente di superare il limite fino al terzo (L3) e al quarto (L4) livello:

Query structure with nested layers L1, L2, L3, and L4, showing depth limit exceeded.

Tieni presente che i campi possono ancora essere contrassegnati come annullabili o non annullabili nello schema. Se un campo che non può essere annullato riceve un QueryDepthLimitReached errore, tale errore verrà generato nel primo campo padre annullabile.

Configurazione dei limiti di conteggio dei resolver

È inoltre possibile controllare il numero di resolver che ciascuna query può elaborare. Analogamente alla profondità della query, puoi impostare un limite a questo importo. Prendete la seguente query che contiene tre resolver:

query MyQuery { resolver1: resolver resolver2: resolver resolver3: resolver }

Per impostazione predefinita, ogni query può elaborare fino a 10000 resolver. Nell'esempio precedente, resolver1resolver2, e resolver3 verranno elaborati. Tuttavia, il progetto potrebbe richiedere di limitare ogni query alla gestione di uno o due resolver in totale. Impostando un limite, potete dire alla query di non gestire alcun resolver oltre un certo numero, come i resolver del primo (resolver1) o del secondo (). resolver2

Per aggiungere un limite di numero di resolver, procedi come segue:

  1. Accedere alla AWS Management Console e aprire la console AppSync.

  2. Nella pagina delle API, scegli il nome di un'API GraphQL.

  3. Nella home page dell'API, nel riquadro di navigazione, scegli Impostazioni.

  4. Nelle configurazioni API, scegli Modifica.

  5. Sotto il limite di numero di Resolver, procedi come segue:

    1. Attiva Abilita il conteggio dei resolver.

    2. In Numero massimo di resolver, imposta il limite di conteggio. Questo valore può essere compreso tra e1. 10000

  6. Selezionare Salva.

Analogamente al limite di profondità della query, il superamento del limite di resolver configurato causa la fine della query con un ResolverExecutionLimitReached errore sui resolver aggiuntivi. Nell'immagine seguente, una query con un limite di numero di resolver pari a 2 tenta di elaborare tre resolver. A causa del limite, il terzo resolver genera un errore e non viene eseguito.

Query with three resolvers, showing error on third resolver due to execution limit reached.