JSUG勉強会2021年その2 Spring GraphQL をとことん語る夕べ に参加しました。今回はオンライン開催。簡単に所感をまとめます。
所感
Spring GraphQL は内部的には graphql-java を使っているようです。昔、graphql-java と Spring Boot を試してみたことがあったっけ。
- GraphQL を Spring Boot で試してみる 1 - kntmr-blog
- GraphQL を Spring Boot で試してみる 2 - kntmr-blog
- GraphQL を Spring Boot で試してみる 3 - kntmr-blog
DataLoader, ページングのデモが分かりやすかったです。このあたりは実際に書いてみた方がより理解できそう。
M2 でマルチパート (ファイルアップロード) が対応されたら確かにおもしろそうだけど、これ本当に GraphQL で対応する必要あるんだろうか...。これこそ GraphQL に合わない API な気もしたりしなかったり。
以下、メモから抜粋。
Spring GraphQL introduction
https://backpaper0.github.io/spring-graphql-introduction/
- Spring GraphQL 1.0.0-M1
- Query, Mutation, Subscription
- schema キーワードで型をカスタマイズできる
- 1回のリクエストで複数のクエリを送信できる
- バージョンなしでAPIを進化できる
- 型にフィールドが追加されても影響ない
- 削除には
@deprecated
ディレクティブを付ける
- Spring GraphQL
- M2 でクライアント側の対応が入るかも
- Web MVC, WebFlux
- subscription
- spring-boot-starter-websocket
- 型定義ファイルは分割可
- GraphiQL
- GraphQlTester
- N+1 問題
- DataLoader
- BatchLoader
- maxBatchSize (バッチサイズ設定可)
- MappedBatchLoader
- 戻り型が Map になる
- ページング
- DataFetcherExceptionResolver
- 例外ハンドリング
- GraphQL に合わない API が欲しいとき
- RestController 書けばいい
- 認証/認可
- エンドポイントが1つなのでエンドポイントごとの認証/認可は不十分
@PreAuthorize
,@Secured
- メトリクス (actuator)
- M2
- Spring Data 統合 (Querydsl)
- DataFetcher, DataLoader 登録の改善
- マルチパート対応
- https://github.com/backpaper0/spring-graphql-introduction
その他
- MyBatis Thymeleaf
- Thymeleaf テンプレートで SQL を動的に生成できる
- MyBatis 以外でも使える
- JdbcTemplate 使うひとにはよさそう