Posted at

Relay Cursor Connectionsの仕様概略

(なんかあった時に見れるように、見せれるようにメモとして残しています。間違ったことが書いてあったらすみません。指摘は大歓迎です)


Relay Cursor Connectionsの仕様概略

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

仕様に沿ったコネクションタイプを定義することで、カーソルを使ったrelayサポートのページングができるようになる


Connectionタイプ

定義


  • 名前がConnectionで終わる

  • edges, pageInfoというフィールドを持つ

フィールド


  • edges


    • Edgeタイプのリストが返る



  • pageInfo


    • non-nullのPageInfoというオブジェクトが返る




Edgeタイプ

定義


  • Connectionタイプのedgesフィールドから返る

  • node, cursorというフィールドをもつ

フィールド


  • node


    • Scalar, Enum, Object, Interface, Union, もしくはNon‐Nullのカスタムタイプを返す

    • リスト型は返せない



  • cursor


    • StringかStringにシリアライズできるタイプを返す

    • 不明瞭な文字列が入る(例 Mg==)




引数

カーソルの後ろからデータをフェッチするとき


  • first ... フェッチするデータの数

  • after ... カーソル

カーソルの前からデータをフェッチするとき


  • last ... フェッチするデータの数

  • before ... カーソル

firstとlastを同時に含むのは非推奨(僕もまだ理由をしっかり理解していない)

https://facebook.github.io/relay/graphql/connections.htm#sec-Pagination-algorithm


PageInfoオブジェクト

定義


  • hasNextPage, hasPreviousPageというboolean型のフィールドを持つ

フィールド



  • hasNextPage


    • after, firstがクエリの引数としてセットされた場合hasNextPageを必ず持つ必要がある    

    • hasPreviousPageは持たなくても良い




  • hasPreviousPage


    • last, beforeがクエリの引数としてセットされた場合hasPreviousPageを必ず持つ必要がある

    • hasNextPageは持たなくても良い