Helidon WebClient

原文はこちら。
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を投げ込んでくださいませ。

Issues
https://github.com/oracle/helidon/issues

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中