Apollo-link-rest: Verschachtelte Abfrageargumente basierend auf dem übergeordneten Abfrageergebnis

Erstellt am 23. März 2018  ·  7Kommentare  ·  Quelle: apollographql/apollo-link-rest

Ich frage mich, ob es möglich ist, verschachtelte Abfragen durchzuführen, bei denen die untergeordneten Abfrageargumente auf dem übergeordneten Ergebnis basieren.
zB basierend auf den angegebenen Dokumenten

const getLukeRestLink = gql`
  query luke {
    Luke @rest(type: "Person", path: "people/1/") {
      name
      films {
        film @rest(type: "Film", path:  filmUrl) { // the filmUrl is the url that is returned in the films field
          title
        }
      }
    }
  }
`;

Filme ist eine Reihe von URLs.
F Ist es möglich, die URL an das Argument für den Filmabfragepfad zu übergeben?

question❔

Hilfreichster Kommentar

Das ist machbar @ Paddy-Hamilton! Verwenden Sie Ihren Beispielcode:

  query luke {
    Luke @rest(type: "Person", path: "people/1/") {
      name
      films {
        url @export(as: "url")
        film @rest(type: "Film", path: ":url") {
          title
        }
      }
    }
  }

Mit der Direktive @export(as: …) können Sie zuvor ausgewählte Daten für weitere verschachtelte Restabfragen verfügbar machen. Kleine Komplikation: Denken Sie daran, dass jede @rest -Anweisung wahrscheinlich eine eigene Netzwerkanforderung ist. In diesem Fall haben Sie also N + 1-Anforderungen, wobei N die Anzahl der Filme ist, in denen Luke sich befindet.

Alle 7 Kommentare

Das ist machbar @ Paddy-Hamilton! Verwenden Sie Ihren Beispielcode:

  query luke {
    Luke @rest(type: "Person", path: "people/1/") {
      name
      films {
        url @export(as: "url")
        film @rest(type: "Film", path: ":url") {
          title
        }
      }
    }
  }

Mit der Direktive @export(as: …) können Sie zuvor ausgewählte Daten für weitere verschachtelte Restabfragen verfügbar machen. Kleine Komplikation: Denken Sie daran, dass jede @rest -Anweisung wahrscheinlich eine eigene Netzwerkanforderung ist. In diesem Fall haben Sie also N + 1-Anforderungen, wobei N die Anzahl der Filme ist, in denen Luke sich befindet.

Möglicherweise finden Sie auch pathBuilder nützlich. Die Dokumentation befindet sich derzeit in der Datei tests/restLink.ts .

Filme ist ein Array von URLs, es ist kein Objekt, das eine URL-Eigenschaft enthält.

Könnten Sie dieses Beispiel ändern?
https://codesandbox.io/s/yw2766yl4x

@fbartho danke für die Erklärung und den Bonus-Tipp für Netzwerkanfragen.

Ich denke, dass die Notwendigkeit, diese verschachtelte Anforderungsmethode in diesem Beispiel zu verwenden, auf die Struktur der API zurückzuführen ist. Daher müsste ich nur mehrere Netzwerkanforderungen akzeptieren, wenn ich diese Daten erhalten möchte. Aber danke, wird bei der Strukturierung meiner eigenen Datenbank und API hilfreich sein.

@fbartho

Ich habe nach mehr Dokumentation rund um die Direktive @export gesucht , aber nur dieses Beispiel gefunden, das @peggyrayzis in dieser Ausgabe erwähnt . Peggy erwähnt auch, dass es sich noch in der experimentellen Phase befindet und nicht offiziell veröffentlicht wurde. Ich möchte es in einem Projekt verwenden, an dem ich arbeite, würde mich aber wohler fühlen, wenn es eine offiziell unterstützte Funktion wäre. Wie sieht die Roadmap für @match ? Wird es bald veröffentlicht?

@ Paddy-Hamilton Wir unterstützen definitiv die @export(as: Direktive in verschachtelten @rest( Abfragen. Gemischte Interaktionen zwischen Apollo-Link-Rest und Apollo-Link-Status sind eine wirklich coole Funktion, aber ich denke, sie müssen auf der Ebene der Apollo-Links diskutiert werden. / cc @peggyrayzis hast du hier einen Einblick?

Ich bin mit der @match -Richtlinie nicht vertraut, daher würde ich mich über Hinweise freuen, wo dies besprochen wurde.

Dieses Problem ist für mich nicht gelöst. Schauen Sie sich bitte https://codesandbox.io/s/6yv8y2z9v3 an

Es wird eine einzelne URL https://swapi.co/api/https://swapi.co/api/films/2/,https://swapi.co/api/films/6/,https://swapi.co/api/films/3/,https://swapi.co/api/films/1/,https://swapi.co/api/films/7/ geladen

Problem ist, dass Filme ein Array ist. Ich denke nicht, dass dies durch pathBuilder gelöst werden kann.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen