3

Ich habe eine etwas komplexere Datenstruktur, die zu einem tief verschachtelten Graphen führt. Momentan lese/lade ich immer Root-Anfragen. Ich denke jedoch, dass dies nicht der beste Weg ist, da immer der Server den gesamten Baum auflösen muss.GraphQL holt zusätzliche Daten von Unterlinien in einem verschachtelten Graphen

Ist es möglich, zusätzliche Daten/Kanten von Unterkanten in einem verschachtelten Diagramm in einer zweiten Anfrage abzurufen/neu zu laden, ohne den gesamten Baum zu durchlaufen?

Wenn ja wie?

Beispiel: Ich habe ein

RootQuery Spaces 
+ ... Other Layers 
    + Project 
     + Edge Tasks 
      + Edge SubTasks 
       + Edge Assigned User 

die Projektliste angezeigt Ich bin nicht Aufgaben auf erstes Anfordern zu laden. Wenn der Benutzer ein Projekt öffnet, möchte ich die Aufgaben nur dieses Projekts laden, ohne die Eltern/Wurzel oder die gesamte Baumstruktur von der RootQuery neu zu laden.

Antwort

2

Kurze Antwort: Nein, können Sie keine Daten abfragen, die nicht als ein Feld Ihrer Wurzel Abfragetyp Definition aufgeführt ist.

Lange Antwort: Obwohl dies nicht möglich ist, ein Feld zu Ihrer Root-Abfrage, ohne hinzuzufügen, können Sie das Verhalten erreichen Sie suchen, mit nur eine tasks Abfrage mit einem Parameter hinzufügen, die die Projekt-ID ist. Dann in Ihrem Client, während Sie die projects abfragen, fragen Sie nicht nach ihren Aufgaben Rand, sondern senden Sie einfach eine separate Abfrage tasks(projectId: ID), wenn Sie es brauchen.

In Apollos GitHunt-Beispiel tun sie dasselbe, um die Kommentarliste jedes Repos abzufragen und sogar die Daten vorab zu holen, wenn der Benutzer über den Link des Repos schwebt. Das ist natürlich halb sehnsüchtiges Verhalten, anstatt faul, so dass Sie dort Ihre eigenen Entscheidungen treffen können.

GraphQLs zukünftige Funktionen ermöglichen es Ihnen, @stream die Liste der Aufgabe an den Client, wenn sie bereit sind, und auch @defer jedes Feld, das Sie ohne fortsetzen möchten. Ihr Szenario hätte möglicherweise eine bessere Lösung, bei der keine zweite Abfrage gesendet werden muss.

Für weitere Informationen schauen Sie in Lees Rede hier: https://youtu.be/ViXL0YQnioU?t=12m50s

Verwandte Themen