JSUG勉強会2021年その2 Spring GraphQL をとことん語る夕べ に行ってきた #jsug

JSUG勉強会2021年その2 Spring GraphQL をとことん語る夕べ に参加しました。今回はオンライン開催。簡単に所感をまとめます。

jsug.doorkeeper.jp

所感

Spring GraphQL は内部的には graphql-java を使っているようです。昔、graphql-java と Spring Boot を試してみたことがあったっけ。

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

その他

ik.am

  • MyBatis Thymeleaf
    • Thymeleaf テンプレートで SQL を動的に生成できる
    • MyBatis 以外でも使える
  • JdbcTemplate 使うひとにはよさそう