よこやまの日記・ブログを自作する編

車輪の再開発でも自分専用ブログをつくるんや!

18日目:重いGraphQLのクエリを制限する機構を導入

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

GraphQLの1クエリは重くできる

GraphQL APIってREST APIと違ってクライント側の裁量が大きいAPIである。REST APIはサーバ側がレスポンス内容を指定するのに対して、GraphQLはクライント側が内容を指定するから。そして、一つのクエリをとても重くすこともできてしまう。

クエリはたとえ1つでもデータベースのあらゆる関連テーブルを走査して、大きな負担をかけてしまう可能性も十分ありえる。

そこで今回は、重いGraphQLクエリを制限する機能を付ける。

Complexity

使っているGraphQLライブラリgqlgenはありがたいことにクエリの重さを算出して、合計値が閾値以上だったらリクエストをキャンセルする機能を持っている。公式では以下のように解説されている。

gqlgen.com

各種項目について“重さ”を計算させる関数を指定して、その合計値でクエリの重さを比較する感じ。

プルリク

というわけで本日のプルリク。まぁいったんはViewer向けのみで良いでしょw

github.com

github.com