18日目:重いGraphQLのクエリを制限する機構を導入
初めてのGraphQL ―Webサービスを作って学ぶ新世代API
- 作者:Eve Porcello,Alex Banks
- 発売日: 2019/11/13
- メディア: 単行本(ソフトカバー)
GraphQLの1クエリは重くできる
GraphQL APIってREST APIと違ってクライント側の裁量が大きいAPIである。REST APIはサーバ側がレスポンス内容を指定するのに対して、GraphQLはクライント側が内容を指定するから。そして、一つのクエリをとても重くすこともできてしまう。
クエリはたとえ1つでもデータベースのあらゆる関連テーブルを走査して、大きな負担をかけてしまう可能性も十分ありえる。
そこで今回は、重いGraphQLクエリを制限する機能を付ける。
Complexity
使っているGraphQLライブラリgqlgenはありがたいことにクエリの重さを算出して、合計値が閾値以上だったらリクエストをキャンセルする機能を持っている。公式では以下のように解説されている。
各種項目について“重さ”を計算させる関数を指定して、その合計値でクエリの重さを比較する感じ。
プルリク
というわけで本日のプルリク。まぁいったんはViewer向けのみで良いでしょw