原文はこちら。
The original entry was written by David Král (Software Developer at Oracle, a member of Helidon and Yasson team).
https://medium.com/helidon/helidon-web-client-72e22f5d509a
Helidon SE 2.0の新しいHelidon WebClientを使うと、リアクティブ形式でターゲットエンドポイントへのGETやPUTといった任意のHTTPリクエストを実行し、レスポンスを処理できます。このWebClientのリアクティブアプローチにより、データの待機中に長時間にわたってブロックされなくなります。
Helidon WebClientはプレリリース版としてHelidon 2.0.0-M2に含まれています。Maven Centralリポジトリから直接ダウンロード、もしくは以下の依存関係をプロジェクトのpom.xmlに含めることでダウンロードできます。
io.helidon.webclient:helidon-webclient
https://search.maven.org/artifact/io.helidon.webclient/helidon-webclient/2.0.0-M2/jar
<dependency>
<groupId>io.helidon.webclient</groupId>
<artifactId>helidon-webclient</artifactId>
<version>2.0.0-M2</version>
</dependency>
【注意】プレリリース版ゆえ、実験的なものであり本番環境での利用を意図しておりません。APIおよび機能はまだ完全にテストが済んでおらず、変更の可能性があります。
Features Overview
Helidon 2.0 WebClientには以下の機能が含まれています。
- Reactive approach
全ての呼び出されたリクエストならびにレスポンスをリアクティブに取り扱います。もはやサーバーからのレスポンスを待つ必要はありません。レスポンスを受け取ると、クライアントはそのタイミングで処理可能なデータ量だけを要求しますので、メモリがオーバーフローすることはありません。 - Simple, builder-like setup and execution
全てのクライアントならびにリクエストをビルダーパターンで作成しますので、可読性およびコードのメンテナンス性が向上します。 - Following redirects
WebClientはリダイレクトチェーンをフォローし、正しいエンドポイントでリクエストを実行できます。正しいエンドポイントや最終的なエンドポイントにクライアントを向ける必要はもうありません。 - Tracing, metrics and security propagation
トレース、メトリック、セキュリティを使うためにHelidon WebServerを構成すると、その設定は自動的にWebClientに伝播され、リクエスト・レスポンスの際に利用されます。
Helidon WebClientはシンプルさに気を遣って設計されました。以下は、’target’エンドポイントへのシンプルなGETリクエストの例です。
WebClient client = WebClient.builder()
.baseUri("http://localhost")
.build();
CompletionStage<String> response = webClient.get()
.path("/endpoint")
.request(String.class);
次の例では、戻り値の型としてJsonObjectを使っています。JsonObjectの処理はWebClientにはデフォルトでは存在しないため、以下のようにregisterメソッドを使ってリクエストビルダーを登録する必要があります。
JsonProcessing jsonProcessing = JsonProcessing.create();
WebClient client = WebClient.builder()
.baseUri("http://localhost")
.build();
CompletionStage<JsonObject> response = webClient.get()
.path("/endpoint")
.register(jsonProcessing.newReader())
.request(JsonObject.class);
GETやPUTといった様々なメソッドを使ってエンドポイントへのリクエストを作成できます。
JsonProcessing jsonProcessing = JsonProcessing.create();
JsonObject entity = //some JsonObject entity
WebClient client = WebClient.builder()
.baseUri("http://localhost")
.build();
CompletionStage<WebClientResponse> response = webClient.put()
.path("/endpoint")
.register(jsonProcessing.newWriter())
.submit(entity);
Helidon WebClientは高度な設定が可能です。デフォルトの構成はほとんどのよくあるユースケースに適していますが、以下の例に示すように、特定の要件を取り扱うように構成することもできます。
Config config = Config.create();
WebClient client = WebClient.builder()
.baseUri("http://localhost")
.config(config.get("client"))
.build();
もしくは、YAMLファイルのようなHelidon configurationを使って構成することもできます。
client:
connect-timeout-millis: 2000
read-timeout-millis: 2000
follow-redirects: true
max-redirects: 5
headers:
- name: "Accept"
value: ["application/json","text/plain"]
services:
exclude: ["some.webclient.service.Provider"]
config:
metrics:
- methods: ["PUT", "POST", "DELETE"]
type: COUNTER
name-format: "client.counter.%1$s.%2$s"
上記の例は構成を簡略化していますが、完全版は以下からご覧頂けます。
full-webclient-config.yaml
https://github.com/oracle/helidon/blob/master/examples/webclient/standalone/src/main/resources/full-webclient-config.yaml
Samples
WebClientの使い方を紹介するサンプルプロジェクトは、Helidonリポジトリにあります。これらのサンプルがWebClientの利用方法の理解の助けになることでしょう。
WebClient example setup
https://github.com/oracle/helidon/tree/master/examples/webclient/standalone
Summary
Helidon WebClientはまだ実験的機能であり、最終化するまでにみなさまからのフィードバックを必要としています。是非お試しいただいて、この原文のエントリにコメントを残したり、Issue Trackerや公式SlackチャネルにIsuueを投げ込んでくださいませ。