Spring GraphQL
このセッションでは、AtlassianのAndreas Marek氏とVMwareのRossen Stoyanchev氏によるSpring GraphQLの紹介が行われました。
GraphQLは比較的新しい技術ですが、RESTに代わるWeb API経由のデータ交換技術として既に実績があり、その使いやすさとコントロールのしやすさから、Webやモバイルのクライアントで急速に普及しています。
Java向けのGraphQL実装としてはGraphQL Javaが以前から提供されていましたが、純粋なGraphQLの実行エンジンとして実装されているため、HTTP上でGraphQLのリクエストを扱うなどの機能がありません。
Spring GraphQLはGraphQL Java上で動きますが、GraphQL Javaには不足している便利な機能を提供しています。
Spring GraphQLで利用できる機能として、まずネットワークからGraphQLのリクエストを受け取り、GraphQL Javaの実行エンジンへ受け渡すためのHTTPハンドラーとWebSocketハンドラーが紹介されました。両ハンドラーとも、Spring MVCおよびSpring WebFluxの両方のフレームワークに対応しています。これらはGraphQL Javaでは提供されていなかった機能です。
次に、Spring GraphQLのセキュリティについても説明がありました。Spring GraphQLで扱うデータや権限ごとに細かくアクセス制御をしたい場合、データレイヤーに Spring Securityのアノテーションを付与することで実現できます。ただしSpring MVCではコンテキストの伝播に注意が必要です。データレイヤーではサーブレットと同じスレッドで実行される保証がないため、従来のThreadLocalによるコンテキストの伝播ができません。そのためThreadLocalAccessorインターフェースが用意されており、これを実装することでコンテキスト情報の伝播を可能としています。WebFluxではReactorのコンテキストが伝播されるのでこのような心配は必要ありません。
その他、下記の機能についても紹介がありました。
- GraphQL Java Engineの初期化サポート
- 例外解決サポート
- アノテーションによるハンドラメソッドの指定
- Querydslのサポート
- テストサポート
- Spring Boot Starter

現在Spring GraphQLは1.0リリースに向けたMilestone段階にありますが、2022年からはRelease Candidate(RC)フェーズに入り、General Availability(GA)版が2022年5月にSpring Boot 2.7に統合された形でリリースされる予定であることが本セッションで発表されました。
最後にStoyanchev氏は「Spring GraphQLを使ってみて要望をフィードバックしてほしい」と述べて、本セッションを締めくくりました。
