LoginSignup
0
0

More than 1 year has passed since last update.

Spring for GraphQL v1.0.0-M3 を使用してみての所感

Posted at

はじめに

2021/12/29 - 2022/01/03 の間に GraphQL を勉強するための題材として Spring for GraphQL を使ってみた感想です。

GraphQL の記憶はまったくなかったので、仕様を調べるところからはじめました。

GraphQL の仕様理解

  • 参照(Query)と書込(Mutation)で大別される
  • レスポンスで必要とするフィールドを指定する
    • 呼び出し方次第で、余計なフィールドを取得しないことを可能とする
  • 1回のリクエストで複数リソースを参照/書込可能
    • 画面を描画する際にRestAPIだと複数回リクエストしていた箇所をGraphQLでは1回ですませられそう

Spring for GraphQL

  • src/main/resources/graphql ディレクトリ配下のGraphQL定義ファイル .graphqls を参照する
  • application.ymlspring.graphql プロパティを参照する
    • spring.graphql.graphiql.enabled=true にするとデバッグツールが利用できる
  • 以下のアノテーションの付与先がGraphQL定義ファイルと対応する
    • org.springframework.graphql.data.method.annotation.Argument
    • org.springframework.graphql.data.method.annotation.MutationMapping
    • org.springframework.graphql.data.method.annotation.QueryMapping
    • org.springframework.graphql.data.method.annotation.SchemaMapping
  • Gradleで、 com.netflix.dgs.codegen プラグインを利用するとGraphQL定義ファイルからリソースを自動生成する

RestAPIからGraphQLにリメイクしてみた

種別 Url 説明
リメイク元 https://github.com/mabubu0203/catcafe OpenAPI Specificationからインターフェース、モデルを自動生成している
リメイク先 https://github.com/mabubu0203/catcafe-graph-ql GraphQL定義からリソース?モデル?を自動生成している

リメイク元紹介

SpringWebFluxSpringR2DBC を利用している。
OpenAPI Generator を使って OpenAPI Specification から Controller を自動生成している。
Redoc から OpenAPI Specification をAPI仕様書として利用できている。

リメイクしての利点

リメイク元の参照系APIは、

  • 一覧取得は必要な要素だけ返却する
  • 詳細取得は全ての要素を返却する

のように使い分けていた。
これを一覧取得に統合して、呼び出し元でフィールドの制限をかける運用にできそうだなと感じた。

物足りないと感じた箇所

ページング

ページングについてはGraphQL側で明確な仕様は存在しない。
推奨の仕様が存在し、ライブラリにも存在している。
だが、 SpringR2DBC とは相性がよくなさそうだと感じた。
なので、ページングについては実装していない。
com.netflix.dgs.codegen プラグインでは自動生成の対象になっている

API仕様書について

SpectaQL でGraphQL定義からドキュメントを生成できる。

所感

  • 文字数とかGraphQL定義ファイルで定義できないの?
    • com.netflix.dgs.codegen プラグインからコード自動生成できてよかった
      • BeanValidationつかえるみたいだけど、GraphQLの仕様にlength長チェックなどはなさそう
  • ApplicationLayerでしか差分でなさそう。すごい。
  • SpringWebFlux に対応しててよかった
  • レスポンスで必要とするフィールドを指定する は欲しい機能だった。すごい。

おまけ

2022/01/03 から 2022/06/05 までに追加開発して、スライドにまとめました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0