GraphQL自体はあくまでクエリ言語で実装を知らないので丁寧にクエリすると良いかもしれない

〜かもしれない、弱腰。

この記事に出てくるクエリは以下をベースにしている。

graphql.org

totalCountだけが必要な時のクエリ

次のようなクエリをベースに考える。

{
  hero {
    name
    friends(first: 2) {
      totalCount
      edges {
        node {
          name
        }
        cursor
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}

もしtotalCountだけが必要な場合、引数のfirstはデフォルト値があると仮定すると次のように書ける。

{
  hero {
    friends {
      totalCount
    }
  }
}

違和感無いと感じていたが、edgesを返すための処理がどれくらい走るかはクライアント側は知らないため、丁寧に first: 0 を指定してクエリすると優しいね、みたいな話をした。

{
  hero {
    friends(fitst: 0) {
      totalCount
    }
  }
}

クライアント側はtotalCountだけクエリしたつもりだが、リゾルバの実装としてfitstのデフォルト値をもとにリスト形式のデータを取得しているかもしれない。

もちろん、リゾルバの実装を覗けばこのあたりの調整は柔軟にできる。せっかくスキーマの仕様に乗っかってやり取りできる仕組みがあるので、 クエリの引数で不要な場合は first:0 のように明示的に不要な旨を書くと良いかもしれない。

冗長な気もするが、不要である旨を伝えるために必要な記述という気持ちに落ち着いた。