1. ホーム
  2. graphql

[解決済み] GraphQLにおける "edge "と "node "の意味は何ですか?

2022-05-09 20:59:53

質問

特定のGraphQLエンドポイントを消費していますが、クエリーとしてきれいなJSON構造を供給しているにもかかわらず、結果を取得すると、"edges" および node"タグを使用しています。これは、明らかな利点もなく、私のデータを汚染しているように思われます。なぜこのようなものがあるのでしょうか?また、より速く、よりシンプルなデータ解析のために、これらを取り除くことは可能なのでしょうか?

解決方法は?

まずは簡単な言葉で紹介します。


GraphQl Relayの仕様

  • オブジェクトのリフェッチ機構
  • コネクションのページング方法に関する記述
  • 変異を予測可能にするための構造

コネクション

  • コネクションは、メタデータを持つオブジェクトの集合体です。 など edges , pageInfo ...
  • pageInfoには hasNextPage , hasPreviousPage , startCursor , endCursor

    • hasNextPage は、さらに利用可能なエッジがあるかどうか、あるいはこの接続の終端に達したかどうかを教えてくれます。
  • レコードの配列: edges

    • edgesは、あなたのデータ(node)を柔軟に使用することを可能にします。
    • エッジは、ページネーションに役立ちます。 GraphQLList しかし、ページネーションなどの機能はなく、オブジェクトの配列 (データ) を扱うだけです。
  • 各エッジは

    • a node レコードまたはデータ
    • a cursor : ページ処理で中継するために base64 でエンコードされた文字列です。

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

ノードです。

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

リレーパジネーションは以下のように動作します。

  • コレクション内のすべてのオブジェクトを取得して first/last xレコード、connectionArgsを通して使用

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

などなど、他にもいろいろあります。 nodeDefinitions , globalFieldId , nodeInterfaces

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