Konfiguration von GraphQL-Laufkomplexität, Abfragetiefe und Introspektion mit AWS AppSync - AWS AppSync

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfiguration von GraphQL-Laufkomplexität, Abfragetiefe und Introspektion mit AWS AppSync

AWS AppSync ermöglicht es Ihnen, Introspektionsfunktionen zu aktivieren oder zu deaktivieren und Grenzwerte für die Anzahl der verschachtelten Ebenen und Resolver in einer einzelnen Abfrage festzulegen.

Verwenden der Introspektionsfunktion

Tipp

Weitere Informationen zur Selbstbeobachtung in GraphQL finden Sie in diesem Artikel auf der Website der GraphQL Foundation.

Standardmäßig ermöglicht Ihnen GraphQL die Introspektion, um das Schema selbst abzufragen, um seine Typen, Felder, Abfragen, Mutationen, Abonnements usw. zu ermitteln. Dies ist eine wichtige Funktion, um zu erfahren, wie die Daten von Ihrem GraphQL-Dienst geformt und verarbeitet werden. Beim Umgang mit Introspektion sind jedoch einige Dinge zu beachten. Möglicherweise gibt es einen Anwendungsfall, der von einer Deaktivierung der Introspektion profitieren würde, z. B. ein Fall, in dem Feldnamen sensibel oder versteckt sein können oder das vollständige API Schema für Verbraucher undokumentiert bleiben soll. In diesen Fällen könnte die Veröffentlichung von Schemadaten durch Introspektion dazu führen, dass bewusst vertrauliche Daten verloren gehen.

Um dies zu verhindern, können Sie die Introspektion deaktivieren. Dadurch wird verhindert, dass Unbefugte Introspektionsfelder in Ihrem Schema verwenden. Es ist jedoch wichtig zu beachten, dass Introspektion für Entwicklungsteams nützlich ist, um zu erfahren, wie Daten in ihrem Service verarbeitet werden. Intern kann es hilfreich sein, die Introspektion aktiviert zu lassen und sie gleichzeitig als zusätzliche Sicherheitsebene im Produktionscode zu deaktivieren. Eine andere Möglichkeit, dies zu handhaben, besteht darin, eine Autorisierungsmethode hinzuzufügen, die AWS AppSync auch Folgendes bietet: Weitere Informationen finden Sie unter Autorisierung.

AWS AppSync ermöglicht es Ihnen, die Introspektion auf der Ebene zu aktivieren oder zu deaktivieren. API Gehen Sie wie folgt vor, um die Introspektion zu aktivieren oder zu deaktivieren:

  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AppSync Konsole.

  2. Wählen Sie auf der APIsSeite den Namen eines GraphQL ausAPI.

  3. Wählen Sie auf Ihrer API Startseite im Navigationsbereich Einstellungen aus.

  4. Wählen Sie in APIKonfigurationen die Option Bearbeiten aus.

  5. Gehen Sie unter Introspektionsabfragen wie folgt vor:

    1. Aktivieren oder deaktivieren Sie Introspektionsabfragen aktivieren.

  6. Wählen Sie Save (Speichern) aus.

Wenn die Introspektion aktiviert ist (das Standardverhalten), funktioniert die Verwendung des Introspektionssystems normal. Die Abbildung unten zeigt beispielsweise ein __schema Feld, das alle verfügbaren Typen im Schema verarbeitet:

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

Wenn Sie diese Funktion deaktivieren, wird stattdessen ein Validierungsfehler in der Antwort angezeigt:

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

Konfiguration von Grenzwerten für die Abfragetiefe

Es gibt Zeiten, in denen Sie möglicherweise eine genauere Kontrolle darüber wünschen, wie die API Funktionen während eines Vorgangs funktionieren. Ein solches Steuerelement besteht darin, die Anzahl der verschachtelten Ebenen, die eine Abfrage verarbeiten darf, zu begrenzen. Standardmäßig können Abfragen eine unbegrenzte Anzahl verschachtelter Ebenen verarbeiten. Die Beschränkung von Abfragen auf eine bestimmte Anzahl verschachtelter Ebenen hat potenzielle Auswirkungen auf die Leistung und Flexibilität Ihres Projekts. Führen Sie die folgende Abfrage aus:

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

Ihr Projekt erfordert möglicherweise die Beschränkung von Abfragen auf L1 oder L2 für einen bestimmten Zweck. Standardmäßig L4 würde die gesamte Abfrage von L1 bis verarbeitet, ohne dass dies kontrolliert werden kann. Durch die Festlegung eines Grenzwerts könnten Sie verhindern, dass Abfragen auf Daten zugreifen, die über die angegebene Ebene hinausgehen.

Gehen Sie wie folgt vor, um eine Abfragetiefenbeschränkung hinzuzufügen:

  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AppSyncKonsole.

  2. Wählen Sie auf der APIsSeite den Namen eines GraphQL ausAPI.

  3. Wählen Sie auf Ihrer API Startseite im Navigationsbereich Einstellungen aus.

  4. Wählen Sie in APIKonfigurationen die Option Bearbeiten aus.

  5. Gehen Sie unter Abfragetiefe wie folgt vor:

    1. Aktivieren oder deaktivieren Sie die Option Abfragetiefe aktivieren.

    2. Stellen Sie unter Maximale Tiefe die Tiefenbegrenzung ein. Dieser Wert kann zwischen 1 und liegen75.

  6. Wählen Sie Save (Speichern) aus.

Wenn ein Limit festgelegt ist, führt das Überschreiten seiner Obergrenze zu einem QueryDepthLimitReached Fehler. Die Abbildung unten zeigt beispielsweise eine Abfrage mit einer Tiefenbeschränkung, bei der das Limit bis zur dritten (L3) und vierten (L4) Ebene überschritten 2 wird:

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

Beachten Sie, dass Felder im Schema immer noch als nullwertfähig oder nicht nullwertfähig markiert werden können. Wenn ein Feld, das keine NULL-Werte zulässt, einen QueryDepthLimitReached Fehler erhält, wird dieser Fehler auf das erste übergeordnete Feld übertragen.

Konfiguration der Grenzwerte für die Anzahl der Resolver

Sie können auch steuern, wie viele Resolver jede Abfrage verarbeiten kann. Wie bei der Abfragetiefe können Sie auch für diesen Betrag ein Limit festlegen. Nehmen wir die folgende Abfrage, die drei Resolver enthält:

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

Standardmäßig kann jede Abfrage bis zu 10000 Resolver verarbeiten. Im obigen Beispiel resolver3 werdenresolver1,resolver2, und verarbeitet. In Ihrem Projekt ist es jedoch möglicherweise erforderlich, jede Abfrage auf die Verarbeitung von insgesamt einem oder zwei Resolvern zu beschränken. Indem Sie ein Limit festlegen, können Sie die Abfrage so einstellen, dass sie keine Resolver verarbeitet, die eine bestimmte Anzahl überschreiten, wie dies bei den Resolvern First (resolver1) oder Second (resolver2) der Fall ist.

Gehen Sie wie folgt vor, um ein Limit für die Anzahl der Resolver hinzuzufügen:

  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AppSyncKonsole.

  2. Wählen Sie auf der APIsSeite den Namen eines GraphQL ausAPI.

  3. Wählen Sie auf Ihrer API Startseite im Navigationsbereich Einstellungen aus.

  4. Wählen Sie in APIKonfigurationen die Option Bearbeiten aus.

  5. Gehen Sie unter Auflösungslimit wie folgt vor:

    1. Aktivieren Sie die Option Anzahl der Resolver aktivieren.

    2. Legen Sie unter Maximale Anzahl an Resolvern die maximale Anzahl an Resolvern fest. Dieser Wert kann zwischen 1 und 10000 liegen.

  6. Wählen Sie Save (Speichern) aus.

Wie bei der Abfragetiefenbeschränkung führt eine Überschreitung der konfigurierten Auflösungsgrenze dazu, dass die Abfrage bei weiteren Resolvern mit einem ResolverExecutionLimitReached Fehler endet. In der Abbildung unten versucht eine Abfrage mit einem Auflösungslimit von 2, drei Resolver zu verarbeiten. Aufgrund des Limits gibt der dritte Resolver einen Fehler aus und wird nicht ausgeführt.

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