ムラサメ研究ブログ

主にゲームやプログラミングのログ

GraphQL

はじめに断っておく
毎日違う事ばっかやってんじゃねーよ!!
なぜまとまって同じ仕事を進めないのか
昨日は AndroidNDKでOpenGLしたのに
今日はGraphQLである
主にサーバー向け

RESTの問題

APIというとRESTである
パスパラメータで指定して欲しい情報をJsonで受け取る
とりあえず REST API使っておけば文句は言われない
ただ、私はいろいろな理由から Rest is dead と思っていた

まず パスパラメータでは、パスの順番どうする? わかりにくいよね問題
例えば 17歳女性のユーザリストを取得する場合

http://localhost/api/v1/find_users/age/17/gender/1
http://localhost/api/v1/find_users/gender/1/age/17

どーっちだ
こういう場合はおそらく

http://localhost/api/v1/find_users?age=17&gender=1

と、クエリパラメータにして名前付きパラメータにすればよい
じゃあ 最初っから全部クエリにしたほうがよくね??

URLをコントローラーにするというアイディアは、MVCの切り分けとしてはわかりやすくとてもGoodなんだけど
そろそろ 弱点が見えてきたと思ってる

もちろん Get、Put、Post、Delete、Patch、Header・・・ のHTTP MethodとDBのCRUDが一致しないのも問題

仕様が増えるごとに パスが増える
APIバージョンがあがるとパスがまた増える・・

そこでGraphQL

まだ調査中だけど、GraphQLは クライアントから欲しいデータをリクエストする
クエリを投げるようなかたちになる
例えば ほんの少し欲しいデータや検索項目が違う場合 RESTだとそのぶんAPI増やす必要があるが
GraphQLでは、クライアント側のリクエストを変更するだけで、サーバは何も変わらない

とりあえず 手を動かすのが早い

GraphQLをNode.jsとexpressでためしてみる | Developers.IO

ClassMethodさん ナイス記事
ただ コードが少しTypoしているのが惜しい
でも そのTypoを自分で直せば理解できてるか確認できる

大雑把にまとめると、GraphQLで検索やUpdate、Insert命令をクライアントから指定できるので
APIの数が減る

まとめ

色々とメリットがありそうなのはわかったが、実際に使うとなると 色々と戸惑うので
まずはGithub等 GraphQLを使ったサービスのAPI事例を見て イメージつけていこうと思う