MicroProfile コミュニティは、MicroProfile ファミリの新しいスタンドアロン API である MicroProfile GraphQL 1.0 をリリースした。MicroProfile Reactive Streams Operators、MicroProfile Context Propagation、MicroProfile Reactive Messagingの3つの既存のスタンドアロンAPIに加わることで、MicroProfile GraphQL仕様の意図は「ユーザーがJavaでポータブルなGraphQLベースのアプリケーションを迅速に開発できるようにする『コードファースト』のAPIセットを提供する」ことにある。
GraphQLは、もともとは2012年にFacebookで社内で開発・使用されていた。
それは、API用の問い合わせ言語と、既存のデータでクエリを実行するためのランタイムだ。GraphQLは、API内のデータの完全でわかりやすい説明を提供し、クライアントが何もせずに必要なものを正確に要求する力を与え、APIを長期的に進化させることを容易にし、強力な開発者ツールを可能にする。
Facebookは2015年にGraphQLをオープンソース化し、最終的には2018年にオープンソースを通じてイノベーションを可能にする非営利団体であるLinux Foundationの支援のもと、新たに設立されたGraphQL Foundationに移管された。
RESTの代替として、GraphQLはデータのオーバーフェッチやアンダーフェッチの問題を解決する。オーバーフェッチとは、エンドポイントからすべてのデータをフェッチすることで、そのデータの一部だけをモバイル・アプリケーションなどに使用することだ。そのため、フィルタリングをして、残ったデータを未使用のままにしておく必要がある。アンダーフェッチとは、エンドポイントからすべてのデータをフェッチしているが、十分なデータがない状態のことだ。これは通常、第2のエンドポイントへの呼び出しが必要だ。
REST のもう一つの課題は、アプリケーションが成長するにつれてエンドポイントの数が潜在的に増える中で、複数のエンドポイントを操作して維持することだ。データの照会と更新に必要なのは1つのエンドポイントだけだ。したがって、クライアントは、GraphQL クエリ文字列を GraphQL サーバに送信することで、データのセットを要求できる。
@GET
そして @POST
というJavaアノテーションの同義語はREST アプリケーションで使用される。GraphQL は @Query
そして @Mutation
というアノテーションを提供する。それぞれは同じような操作だ。@Query
は GraphQL サーバに要求された読み取り専用の操作であり @Mutation
はGraphQLサーバに要求された読み書き操作だ。
GraphQL仕様を実装するための要件は2つある。
- GraphQLスキーマを生成して利用可能にする。
- これは、ユーザーコードのアノテーションを評価することで実現でき、GraphQL クエリと変換を処理するためのすべてのメソッドを含まなければならない。
- GraphQLリクエストを実行する。
- これは、クエリまたは変換のいずれかの形式で、HTTP経由でこれらのリクエストを実行する。
複数のプログラミング言語でサポートされているMicroProfile GraphQL 1.0仕様のJava実装は、SmallRyeによって提供されている。これはRed Hatがスポンサーとなって他のMicroProfile APIを実装している。Red Hat の主任ソフトウェアエンジニアである Phillip Krüger氏は、REST と GraphQL アプリケーションのサンプルを作成し、 GraphQL がデータのオーバーフェッチの問題をどのように解決するかを視覚的に示した。アプリケーションはQuarkusとWildFlyの両方にデプロイされている。
GraphQL UIが実行されると、GraphQLのクエリ文字列は左側のペインに入力され、結果のレスポンスが中央のペインにJSON形式で表示され、クラスやメソッドのドキュメントが右側のペインで利用可能となる。右側のペインを折りたたむと、入力ペインと出力ペインのみを表示できる。
MicroProfile GraphQLの次のリリースでは、開発者は次のような機能を期待できる。 @Paginate
アノテーションは、より効率的なページ付けのためのもので、レポーティングメトリクスなどの他のMicroProfile APIとの相互運用性、既存の定義済みスカラを補完するためのカスタムスカラを提供する機能を提供する。
資料
- Yasmin Aumeeruddy氏によるOpen Liberty 20.0.0.6でのGraphQLのサポート (2020年6月5日)
- Phillip Krüger氏によるMicroProfile GraphQLの紹介(2020年2月25日)