Freigeben über


Problembehandlung bei der GraphQL-API

Lösungen für allgemeine GraphQL-Schemagenerierung, Autorisierung, Introspection und Beziehungsprobleme im Daten-API-Generator.

Häufig gestellte Fragen

Was ist die GraphQL-API in DAB?

Der Daten-API-Generator erstellt automatisch eine GraphQL-API für jede Entität, die in dab-config.json konfiguriert ist. DAB erstellt Abfrage- und Mutationstypen basierend auf den Entitätsdefinitionen und übersetzt GraphQL-Anfragen zur Laufzeit in Datenbankabfragen. Für relationale Datenbanken ist keine Schemaerstellung erforderlich; Cosmos DB erfordert eine GraphQL-Schemadatei.

Wo befindet sich der GraphQL-Endpunkt?

Der GraphQL-Endpunkt ist unter /<graphql-path> verfügbar und standardmäßig auf /graphql eingestellt. Der Pfad kann mithilfe der --graphql.path Option in dab init oder durch Bearbeiten dab-config.jsonangepasst werden. Die GraphQL-IDE (Banana Cake Pop) ist auf demselben Pfad verfügbar, wenn DAB im Entwicklungsmodus ausgeführt wird.

Unterstützt DAB GraphQL-Abonnements?

Nein. Der Daten-API-Generator unterstützt derzeit keine GraphQL-Abonnements. Nur Abfragen und Mutationen werden unterstützt. Wenn Ihre Anwendung Echtzeitupdates erfordert, sollten Sie den Abfrageendpunkt abfragen oder einen separaten Ereignisdienst zusammen mit DAB verwenden.

Häufig auftretende Probleme

GraphQL-Schema nicht generiert

Symptom: Der GraphQL-Endpunkt gibt keine Typen für eine Entität zurück, oder die Entität fehlt im Schema.

Ursache: Die Entität ist nicht für GraphQL aktiviert, oder die Entitätskonfiguration enthält einen Fehler, der die Schemagenerierung verhindert.

Öffnen Sie dab-config.json und bestätigen Sie, dass die Entität "graphql": { "enabled": true } oder dass graphql nicht explizit auf false gesetzt ist. Überprüfen Sie DIE DAB-Startprotokolle auf Fehler bei der Schemagenerierung. Stellen Sie sicher, dass die Tabelle der Entität source in der Datenbank vorhanden ist und der Datenbankbenutzer über ausreichende Berechtigungen zum Lesen der Metadaten verfügt.

Mutation gibt Autorisierungsfehler zurück

Symptom: Eine create, update oder delete-Mutation gibt einen Autorisierungs- oder Berechtigungsverweigerungs-Fehler zurück.

Ursache: Die in der Anforderung verwendete Rolle verfügt nicht über die erforderliche Berechtigung, die für den Mutationsvorgang für die Entität konfiguriert ist.

Auflösung: Überprüfen Sie das permissions Array für die Entität in dab-config.json. Stellen Sie sicher, dass die Rolle (z. B. authenticated) über create, update oder delete in ihrer actions-Liste verfügt. Verwenden Sie dab update, um die Berechtigung hinzuzufügen, und starten Sie dann DAB neu.

Introspektion in der Produktion deaktiviert

Symptom: GraphQL-Clients oder Tools erhalten beim Abfragen des Schemas einen Fehler wie Introspection is not allowed, zum Beispiel.

Ursache: DAB deaktiviert die GraphQL-Introspektion, wenn sie im Produktionsmodus ausgeführt wird. Dies ist das erwartete Verhalten und ist ein Sicherheitsstandard, um zu vermeiden, dass das Schema nicht autorisierten Clients ausgesetzt wird.

Auflösung: Dieses Verhalten ist beabsichtigt. Um die Introspektion während der Entwicklung zu aktivieren, führen Sie DAB mit --no-https-redirect aus oder bestätigen Sie, dass host.mode auf development in dab-config.json festgelegt ist. Aktivieren Sie Introspektion bei Produktionsbereitstellungen nicht.

Beziehungsfeld gibt NULL zurück.

Symptom: Eine Abfrage für eine Entität gibt für ein verknüpftes Entitätsfeld zurück null , obwohl die zugehörigen Daten in der Datenbank vorhanden sind.

Ursache: Die Beziehung zwischen den beiden Entitäten ist nicht in dab-config.json konfiguriert, oder die Verknüpfungsfelder sind falsch zugeordnet.

Resolution: Verwenden Sie dab update, um die Beziehung hinzuzufügen und --relationship, --cardinality, --target.entity und die entsprechenden Verknüpfungsfelder anzugeben. Überprüfen Sie, ob die Fremdschlüsselspaltennamen in --relationship.fields und --target.fields mit den tatsächlichen Spaltennamen in der Datenbank übereinstimmen. Überprüfen Sie DAB-Protokolle auf Fehler bei der Verknüpfungsgenerierung.

Der Beziehungsname überschneidet sich mit einem offengelegten Feldnamen.

Symptom: Abfragen für eine Entität mit einer Beziehung geben unerwartete Ergebnisse oder einen Schemafehler zurück, insbesondere, wenn ein Beziehungsname mit einem der eigenen Feldnamen der Entität übereinstimmt.

Ursache: Der Daten-API-Generator überprüft derzeit nicht, ob Beziehungsnamen und offengelegte Feldnamen in derselben Entität unterschiedlich sind. Wenn sie sich überlappen, ist das generierte Schema mehrdeutig, und Abfragen verhalten sich möglicherweise falsch. Dies ist eine bekannte Einschränkung, die im GitHub-Problem #1937 nachverfolgt wird.

Auflösung: Stellen Sie sicher, dass Beziehungsnamen keinen Feldnamen duplizieren, der von derselben Entität verfügbar gemacht wird. Benennen Sie entweder die Beziehung um, wobei Sie --relationship in dab update verwenden, oder das exponierte Feld, wobei Sie --map in dab update verwenden, um sie zu unterscheiden.