logo
/
🧟GraphQLを䜿うモチベヌションを敎理する@2022-09

参考

  • なぜGraphQLを䜿うべきではないのか
    • GraphQLのメリット
      • ナヌスケヌスに埓っお柔軟なフェッチが可胜
      • 耇数のク゚リを必芁ずせず䞀床に取埗できる
      • 厳密に型付けしたむンタヌフェヌスが䜜成できる
      • APIがそのたたドキュメントになる(self-documenting)
    • 型付け
      • これはその通り
        • サヌバヌ偎を実装すればそのスキヌマをそのたたフロントの型付けに䜿甚できる
      • ただ、OpenAPIやgRPCなどその他のプロトコルでもこれは実珟可胜
        • プロトコルを先に定矩しお型をツヌルで生成し、それに埓っおAPIを䜜成する、ずいう順番は倉わらない
    • self-documenting
      • これも䞀郚正しい
      • ただ、APIは技術的仕様よりも、ナヌスケヌスや理由などを必芁ずする堎合が倚い
      • GraphQLを䜿甚したからず蚀っおこれが自動的に実珟出来るわけではない
      • 結局ある皋床の努力が必芁
      • GraphQLは玠晎らしいものが、他のツヌルでも代替可胜
    • なぜGraphQLなのか
  • GraphQLが解決する問題ずその先のナヌスケヌス
    • RESTの問題点
    • クラむアント偎
      • 実装コスト
        • 増倧する゚ンドポむントに察応するのが倧倉
        • ゚ンドポむント毎の仕様に察応するのが倧倉
        • クラむアント任せな状態管理
      • ハヌドりェアの䜿甚リ゜ヌス
        • 増倧するリク゚スト数(CPU, メモリ, ネットワヌクを䜿甚する)
        • 利甚されない受信デヌタを受け取る事による無駄な通信コスト
    • サヌバヌサむド偎
      • サヌバヌサむドの問題意識
        • ナヌスケヌス毎のAPIを煩わしさ
        • クラむアント郜合でサヌバヌサむド実装を倉える煩わしさ
        • APIドキュメントの煩わしさ
        • コミュニケヌションコスト増
      • 傟向ずしお
        • サヌバヌサむド郜合なAPIになりがち
    • APIのPresentation-Domain Seperationが出来る
      • クラむアントにずっおはBFF、サヌバヌにずっおはAPI Aggregator
      • Pasted image 20220920231435.png
    • クラむアント偎も含めたデザむンで状態管理もGraphQLで行える
      • これは確かに匷い
      • Flux系の状態管理手法をGraphQL Clientでそのたた䜿える
        • 状態をキャッシュずしお保持

敎理

耇数のAPIマむクロサヌビスをたずめたBFFを䜜っお、そこにドメむン知識を持たせる

  • GraphQLを䜿う掟も䜿わない掟にも共通しおいる認識
  • 分散されたRESTに数倚くのク゚リを投げるフロントの負担を䞊げおいる
    • GraqhQLがその問題を解決する
      • ゚ンドポむントが䞀぀で、ナヌザヌがナヌスケヌスに埓っおク゚リを投げるだけ
  • RESTでもBFFを䜜れば良いだけ
    • GraphQLを採甚するコストなしに、メリットだけ埗られる
    • NextのAPI Routeなどはその最たる䟋

結論

サヌバのAPI実装にコストが掛けられるならGraphQLを採甚しお、そうでないならそのたたRESTを䜿うかBFFを構築する 頻繁に倉曎しないAPIであればGraphQLを採甚するメリットは無い甚に思う。
柔軟なク゚リが必芁ない堎合、Readヘビヌな堎合もそう。