web-dev-qa-db-ja.com

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

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

68
Ska

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


GraphQlリレーの仕様

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

接続:

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

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

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

    • node:レコードまたはデータ
    • cursor:ページネーションの中継に役立つbase64エンコード文字列

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

ノード:

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

リレーページネーションはとして動作します

  • コレクション内のすべてのオブジェクトを取得し、connectionArgsを介して使用されるfirst/last xレコードに基づいてスライスを返します

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

nodeDefinitionsglobalFieldIdnodeInterfacesなど、考慮すべき事項が他にもたくさんあります

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

42
p0k8_