GraphQLで「エッジ」と「ノード」の意味は何ですか?


100

特定のGraphQLエンドポイントを使用していますが、クエリとしてクリーンなJSON構造を提供していますが、結果を取得すると、「エッジ」タグと「ノード」タグが表示されます。それはあたかもそれが私のデータを汚染しているように見え、明らかな利点はありません。なぜそこにあり、それらを取り除いてデータの解析をより速く、より簡単にすることは可能ですか?


1
接続、エッジ、ノードは、主にリレー、GraphQLクライアントのコンテキストで使用される用語です。詳細については、このFAQを参照してください
marktani 2017年

2
明確にするために:接続はリレー固有のものではありません。綿密な外観は、こちらの記事を参照してください。medium.com/p/explaining-graphql-connections-c48b7c3d6976
helfer

結果の長いリストにページングを提供する標準的な方法です。どの実装にも関連付けられていません。
Matt

回答:


64

簡単な言葉で短い紹介から始めましょう


GraphQlリレーの仕様

  • オブジェクトを再フェッチするメカニズム
  • 接続をページングする方法の説明
  • 突然変異を予測可能にするための突然変異の周りの構造

接続:

  • 接続はedgespageInfo... などのメタデータを持つオブジェクトのコレクションです。
  • pageInfoが含まれていますhasNextPagehasPreviousPagestartCursorendCursor

    • hasNextPage 利用可能なエッジがまだあるかどうか、またはこの接続の終わりに達したかどうかを通知します。
  • レコードの配列:エッジ

    • エッジはデータ(ノード)を使用する柔軟性を提供します
    • エッジはページネーションに役立ちます。graphqlはありますが、ページネーションGraphQLListなどの機能はなく、オブジェクト(データ)の配列のみを使用します。
  • 各エッジには

    • a node:レコードまたはデータ
    • a cursor:base64でエンコードされた文字列。

https://facebook.github.io/relay/graphql/connections.htm

ノード:

  • リレーを使用して表示する必要があるノードの数を設定できます connectionArgs(first, last, after, before)

リレーページネーションは

  • コレクション内のすべてのオブジェクトをフェッチし、first/lastconnectionArgsで使用されるxレコードに基づいてスライスを返します

  • after/before ノードからカーソルを使用して必要なスライス(データ)の数をGraphQLサーバーに示すために使用されます

以下のように考えるために、より多くのものがありnodeDefinitionsglobalFieldIdnodeInterfaces

https://github.com/graphql/graphql-relay-js#object-identification


17
この答えは正しいと思いますが、多くの誤解が含まれています。この記事では、GraphQL接続の背後にある理由をかなりよく説明しています。medium.com
p

6
誤解はどこにありますか、それは単なる簡単な情報です。誤解を見つけた場合は、いつでも改善して改善することができます
p0k8_

これらの構成要素をgraphql UI から操作できますか?たとえば、hasNextPageや、Relayを備えたJSを通じてのみ利用できますか?
スカ

はい、graphql-relayを使用してgraphiql UIからこれらに取り組むことができます
p0k8_

ではないeach node will have a cursor、むしろeach edge will have a cursor、その参照してくださいblog.apollographql.com/...
風の
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.