ドメイングラフサービス(DGS)フレームワークの概要
1. 概要
クライアント/サーバー通信に関する過去数年間の最も重要なパラダイムの変更の1つは、オープンソースのクエリ言語である GraphQL と、APIを操作するためのランタイムです。 これを使用して、必要な正確なデータをリクエストできるため、必要なリクエストの数を制限できます。
Netflixは、ドメイングラフサービスフレームワーク(DGS)サーバーフレームワークを作成して、作業をさらに簡単にしました。 このクイックチュートリアルでは、DGSフレームワークの主な機能について説明します。 このフレームワークをアプリに追加する方法と、その基本的なアノテーションがどのように機能するかを確認します。 GraphQL自体の詳細については、IntroductiontoGraphQLの記事をご覧ください。
2. ドメイングラフサービスフレームワーク
Netflix DGS (ドメイングラフサービス)は、Kotlinで記述され、SpringBootに基づくGraphQLサーバーフレームワークです。 Springフレームワークを除いて、外部の依存関係を最小限に抑えるように設計されています。
Netflix DGSフレームワークは、SpringBoot上に構築された注釈ベースのGraphQLJavaライブラリを使用します。注釈ベースのプログラミングモデルに加えて、いくつかの便利な機能を提供します。 GraphQLスキーマからソースコードを生成できます。いくつかの重要な機能をまとめましょう:
- アノテーションベースのSpringBootプログラミングモデル
- 単体テストとしてクエリテストを作成するためのテストフレームワーク
- スキーマから型を作成するためのGradle/Mavenコード生成プラグイン
- GraphQLフェデレーションとの簡単な統合
- SpringSecurityとの統合
- GraphQLサブスクリプション(WebSocketおよびSSE)
- ファイルのアップロード
- エラー処理
- 多くの拡張ポイント
3. 構成
まず、DGSフレームワークはSpring Bootに基づいているため、Spring Bootアプリを作成しましょう。 次に、DGS依存関係をプロジェクトに追加しましょう。
<dependency>
<groupId>com.netflix.graphql.dgs</groupId>
<artifactId>graphql-dgs-spring-boot-starter</artifactId>
<version>4.9.16</version>
</dependency>
4. スキーマ
4.1. 開発アプローチ
DGSフレームワークは、スキーマファーストとコードファーストの両方の開発アプローチをサポートします。ただし、主にデータモデルの変更に対応しやすいため、推奨されるアプローチはスキーマファーストです。 Schema-firstは、最初にGraphQLサービスのスキーマを定義し、次にスキーマの定義を照合してコードを実装することを示します。 フレームワークは、デフォルトで src / main / resources /schemaフォルダー内のスキーマファイルを取得します。
4.2. 実装
Schema Definition Language(SDL)を使用して、サンプルアプリケーション用の単純なGraphQLスキーマを作成しましょう。
type Query {
albums(titleFilter: String): [Album]
}
type Album {
title: String
artist: String
recordNo: Int
}
このスキーマを使用すると、アルバムのリストをクエリしたり、オプションでtitleでフィルタリングしたりできます。
5. 基本的な注釈
スキーマに対応するAlbumクラスの作成から始めましょう。
public class Album {
private final String title;
private final String artist;
private final Integer recordNo;
public Album(String title, String artist, Integer recordNo) {
this.title = title;
this.recordNo = recordNo;
this.artist = artist;
}
// standard getters
}
5.1. データフェッチャー
データフェッチャーは、クエリのデータを返す責任があります。 @ DgsQuery、@ DgsMutation、および@DgsSubscription アノテーションは、クエリ、ミューテーション、およびサブスクリプションタイプでデータフェッチャーを定義するための省略形です。上記のすべてのアノテーションは@と同等です。 DgsDataアノテーション。 Javaメソッドでこれらのアノテーションの1つを使用して、そのメソッドをデータフェッチャーにし、パラメーターを使用して型を定義できます。
5.2. 実装
したがって、DGSデータフェッチャーを定義するには、@DgsComponentクラスにクエリメソッドを作成する必要があります。 この例ではAlbumsのリストをクエリしたいので、@DgsQueryでメソッドをマークしましょう。
private final List<Album> albums = Arrays.asList(
new Album("Rumours", "Fleetwood Mac", 20),
new Album("What's Going On", "Marvin Gaye", 10),
new Album("Pet Sounds", "The Beach Boys", 12)
);
@DgsQuery
public List<Album> albums(@InputArgument String titleFilter) {
if (titleFilter == null) {
return albums;
}
return albums.stream()
.filter(s -> s.getTitle().contains(titleFilter))
.collect(Collectors.toList());
}
また、メソッドの引数にアノテーション@InputArgumentを付けました。 このアノテーションは、メソッド引数の名前を使用して、クエリで送信された入力引数の名前と一致させます。
6. Code-Genプラグイン
DGSには、GraphQLスキーマからJavaまたはKotlinコードを生成するためのcode-genプラグインも付属しています。 コード生成は通常、ビルドと統合されています。
DGSコード生成プラグインはGradleとMavenで使用できます。プラグインは、ドメイングラフサービスのGraphQLスキーマファイルに基づいて、プロジェクトのビルドプロセス中にコードを生成します。 プラグインは、タイプ、入力タイプ、列挙型、インターフェースのデータ型、サンプルデータフェッチャー、およびタイプセーフクエリAPIを生成できます。の名前を含むDgsConstantsクラスもあります。タイプとフィールド。
7. テスト
APIをクエリする便利な方法は、 GraphiQLです。GraphiQLは、DGSフレームワークに付属しているクエリエディターです。デフォルトのSpring Bootポートでアプリケーションを起動してみましょう。 URL http:// localhost:8080/graphiqlを確認してください。 次のクエリを試して、結果をテストしてみましょう。
{
albums{
title
}
}
RESTとは異なり、クエリから返されるフィールドを具体的にリストする必要があることに注意してください。 応答を見てみましょう:
{
"data": {
"albums": [
{
"title": "Rumours"
},
{
"title": "What's Going On"
},
{
"title": "Pet Sounds"
}
]
}
}
8. 結論
Domain Graph Service Frameworkは、GraphQLを使用する簡単で非常に魅力的な方法です。 上位レベルのビルディングブロックを使用して、クエリの実行などを処理します。 DGSフレームワークは、便利なSpringBootプログラミングモデルでこれらすべてを利用できるようにします。 このフレームワークには、この記事で取り上げるいくつかの便利な機能があります。
アプリでのDGSの構成について説明し、その基本的なアノテーションのいくつかを確認しました。 次に、スキーマからデータを作成してクエリを実行する方法を確認する簡単なアプリケーションを作成しました。 最後に、GraphiQLを使用してAPIをテストしました。 いつものように、例はGitHubのにあります。