このエントリは以下のエントリをベースにしています。
This entry is based on the following one, written by Jean-François James (Senior Software Architect, Head of Worldline Expert Community).
https://jefrajames.wordpress.com/2019/07/25/a-preview-of-microprofile-graphql/
このエントリはmpql-previewプロジェクトと関係があります。
A preview of the future MicroProfile GraphQL specification
https://github.com/jefrajames/mpql-preview
Objectives
このプロジェクトは将来のEclipse MicroProfile GraphQL仕様のプレビューを提供することを目的としています。MicroProfile GraphQLをご存知ない場合は、以前のエントリとGitHubをご覧ください。手短に言えば、MicroProfile GraphQLは、モダンなAPIを開発するためにGraphQLをMicroProfileプラットフォームにおける第一級の市民とすることを目的としています。
When GraphQL meets MicroProfile
https://jefrajames.wordpress.com/2019/01/04/when-graphql-meets-microprofile/
https://logico-jp.io/2019/04/22/when-graphql-meets-microprofile/
MicroProfile GraphQL
https://github.com/eclipse/microprofile-graphql
GraphQLはFacebookが作った仕様で2018年11月からLinux Foundationがホストしています。クライアントサイドを非常に柔軟に作成でき、特にデータ指向APIに関連しています。
GraphQL
https://graphql.github.io/graphql-spec/
GraphQLについて知りたい方は、Bojan Tomicのすばらしいチュートリアルを辿ってください。
graphql-java Tutorial – Introduction
https://www.howtographql.com/graphql-java/0-introduction/
Status of Eclipse MicroProfile GraphQL
MicroProfile GraphQLはEclipseプロジェクトで、2018年12月にスタートしました。コードファーストのアプローチに従うGraphQLアプリケーションのための標準APIを定義することを目的としています。「コードファースト」とはGraphQLスキーマを事前に定義せず、アプリケーション起動時にJavaコードから導出することを意味します。
現在のAPIは一連のアノテーションのセットから構成されています。
プロジェクトはまだ開発途中ですが、既にお試し頂ける状態にあります。
- プロジェクトはGitHubからご覧頂けます。
https://github.com/eclipse/microprofile-graphql - APIはMaven Centralにパブリッシュ済みです。
https://mvnrepository.com/artifact/org.eclipse.microprofile.graphql/microprofile-graphql-api - 最初のプロトタイプ実装はspqrから提供されています。GitHubのmicroprofile-protpブランチでご覧頂けます。
Java 8+ API for rapid development of GraphQL services
https://github.com/leangen/graphql-spqr/tree/microprofile-proto
MicroProfile GraphQLの完全な実装がまだ利用できないことを除けば、試して頂ける状態にあります。
What is this preview project about?
このプロジェクトは3パートから構成されています。
- SuperHero デモアプリケーション
- SuperHeroアプリとspqr実装の間の糊 (glue) を作成するつなぐCDI拡張ベースのrunner。このglueが必要なのは、実際のMicroProfile GraphQL実装が現在開発中ゆえである。IBM、Red Hat、そしてTomitribeが現在開発に取り組んでいる。ServletもまたHTTPトランスポートを確保するためにrunner内で定義されている。
- テスト実行のための、基本的なGraphQLクライアント
Payara 5.192を使うJava EE Webアプリケーションとして開発されており、任意のJava EE 8プラットフォームで実行できます。
Building and running the project
Preambles
まず、JDK 8(もしくはそれ以降のJDK)とMaven 3.5がインストールされている必要があります。より細かく言えば、このプロジェクトは以下のコンポーネントを使って開発されました。
- Maven 3.6.1,
- OpenJDK 11.0.3 with OpenJ9.
Building the project
以下の手順を踏む必要があります。
- このプロジェクトを複製する
- spqrのmicroprofile-protoブランチをGitHubから複製する
Java 8+ API for rapid development of GraphQL services
https://github.com/leangen/graphql-spqr/tree/microprofile-proto - ローカルでビルドしインストール(Maven Centralは利用できない)
- Payara 5.192をダウンロード
https://www.payara.fish/software/downloads/ - Payaraを起動するため、 asadmin start-domain domain1 を実行(テスト目的で必要)
- Mavenを使ってプロジェクトをビルド
- WARファイルができたら、お気に入りのIDEを使って自由にソースコードを変更したり、アプリケーションサーバーを変更したり…
コードの変更時には、少なくとも1個の@GraphQLApiクラスがアプリケーションを起動するものと想定されていることにご注意ください。
Running
SuperHeroアプリケーションを含むWARファイルはJava/Jakarta EE 8に完全準拠しており、任意のアプリケーションサーバーにデプロイできます。現時点でテスト済みの環境は以下の通りです。
- GlassFish 5.1
- OpenLiberty 19.0.5
- TomEE plus 8.0.0-M2
- Wildfly 16.0.0.Final
Playing around with GraphQL
アプリを開始して、Indexページに移動してください。この中に2個の選択肢があります。
- GraphQL スキーマのイントロスペクト
これはGraphQLの重要なコンセプトで、サーバーとクライアント間の契約(Contract)として機能します。ところで、GraphQLはネイティブのイントロスペクションを提供します。 - GraphQLを使う
SuperHeroアプリケーションと対話するためにGraphQLを使います。GraphiQLは対話的なJavaScriptベースのツールで、Webブラウザからクエリやmutationの送信を実現します。
An in-browser IDE for exploring GraphQL.
https://github.com/graphql/graphiql
GraphQL の構文に不慣れな場合、graphql-config.propertiesファイルに定義済みのテストで使うクエリをCopy & Pasteしてもかまいません。
全てのヒーローを取り出すには
query allHeroes {
allHeroes {
name
primaryLocation
superPowers
realName
}
}
Avengers チームに属するヒーローを取り出すには
query allAvengers {
allHeroesInTeam(team: "Avengers") {
name
primaryLocation
superPowers
}
}
指定されたスーパーパワーを持つAvengersチームの新しいヒーローを作成するには
mutation createNewHero {
createNewHero(
hero: {
name: "Captain America",
realName: "Steven Rogers",
superPowers: ["Super strength", "Vibranium Shield"],
primaryLocation: "New York, NY",
teamAffiliations: [{name: "Avengers"}]
}
)
{
name
primaryLocation
superPowers
realName
}
}
是非、GitHub mpql-previewプロジェクトを是非ご覧ください。MicroProfile GraphQLで遊んでいただき、MicroProfile GraphQLにご期待ください。
A preview of the future MicroProfile GraphQL specification
https://github.com/jefrajames/mpql-preview