オライリーの初めてのGraphQLを読んだので所感

最近やれてなかったことを少しずつやるようにしていて、その中でGraphQLってちゃんとやれていなかったなと思ったのでとりあえずオライリー本で始めてみようってなりました。

GraphQL自体は随分前にGatsby.jsでWordPressのデータを取得してページを作ってみた以来で、あんまり理解も出来ていなかったのでいい機会でした

あらためて。読んだのはこれ。
初めてのGraphQL ――Webサービスを作って学ぶ新世代API

サーバーの章や付録は読み飛ばしてるので、他のところを読んでみての所感。

第1章

GraphQLとは何かみたいな話。

よく使われるRESTなAPIアクセスの場合、実際のところレスポンスの一部分しか使ってないけど、構成上リクエストしないといけないようなシーンが多々起こってしまうため、無駄なトラフィックが発生し勿体無いよねみたいな問題がある。ここを解消しようとして作られたのがGraphQL。
GraphQLの場合、必要なデータに絞ってリクエストを投げることができるため、通信が必要最低限になる。

また、この際GraphQLでデータにアクセスする時のクエリは、DBに対するSQLみたいな感じで、書いてる感じはJavaScriptのオブジェクトとか関数みたいな感じでSQLを書くような気分。

第2章

グラフ理論。
データ同士の関係・つながりを表すための考え方みたいな話。

正直さらっと読み流したので特になし

第3章

実際にGraphQLでデータを読み書きする際に使用する命令について。

CRUDで言うところの、CUDを mutation、 Rを query で表す。
なので、INSERT, UPDATE, DELETEは mutation 。SELECTは query になる。
フロント側は2本なので入れて投げればいいのかもしれないけど、サーバー側がどうやって判別してるのか気になるし、なんなら辛くない?って思ったのでこの辺りはあらためてサーバーの章を読もうと思う。

地味なポイントとして、これらのクエリはHTTPのPOSTメソッドで送るから、HTTPのキャッシュが利かせられないのが注意だよねって話を聞いた。
なるほどと思ったけど、キャッシュに関してはApollo/clientとかReact-queryみたいなライブラリ側で出来るみたいだから特に問題にならないかな?

スカラー型とオブジェクト型があって、前者はプログラミング言語のプリミティブ型に近い概念。後者は1つ以上のスキーマで定義されているフィールドの集合で、返されるJSONオブジェクトの型を規定したりする。

数値を扱うのがIntとFloatだったり、別途ID型があったりするのがポイントかなと思う。

フラグメント

同じ型で同じフィールドを持ったクエリを書く場合に同じものを使い回せるような機構。
Sassの @extend に近いような気がした。

フラグメント周りはJavaScript/TypeScriptっぽくて、Typeエイリアスみたいなオブジェクトみたいな感じでフラグメントを定義して、 ...SomeFragment といったスプレッド演算子みたいな書き方で使うことができる。

フィルタリング・ページングなどなど

よく使うのはこのへんかなと思って読みつつサンプルを見ていってた

レスポンスの形式を指定するので、そこでフィルタリングやページングに関わるものを書くような形になっている

query {
  getPost(id: "0x1") {
    title
    text
    datePublished
  }
}

(Search and Filtering - DGraph から)

queryに名称をつけて、その引数からフィルタリングしたい値なんかを渡してあげるのがよくある使い方らしい。
そこでバリデーションをかけたりできるので極力使うようにしたほうが良さそう。

実際に触り始めて

実際に触りながら色々試してるんだけど、ちょっと変わったことをやろうとすると難しいなというのが所感。

結構手探りなので作法的にNGを踏んでるのかもしれないなというもの気になりつつ、あんまり情報が出てこなかったりするのが辛いのはあるなぁと思う

最近読んだちょっとしたテクニック的なもの
頼むからGraphQLのクエリを動的に組み立てるのはやめてくれ

クエリに関しては書いたものをcode-generaterで生成してるんだけど、Shopify社がビルダー作ってたりするのでこういうのを使ってみるのもいいのかなーというところ。
Shopify/graphql-js-client - github

まだまだ難しいけど、覚えると便利なんだろうなと言うものでした

読んでみて

いったい何かから始まり、どういう考えなのか、どう触っていくのかをフロント・サーバー両視点から書いてあるのはいいなと思いました。
また、書き方や実際に試す先も紹介されてたりするのでこれから始めたい人にはいい本だと思います