CodeGym /Java Course /モジュール 3 /新しいHTTPクライアント

新しいHTTPクライアント

モジュール 3
レベル 10 , レッスン 0
使用可能

1.1 HttpClient の概要

JDK 11 以降、Java プラットフォームの開発者は、http リクエストを行うための強力な新しいツールである を JDK に追加しましたjava.net.http。これには 4 つの主要なクラスが含まれています。

  • HTTPクライアント
  • HTTPリクエスト
  • HTTPレスポンス
  • ウェブソケット

これらは、およびを使用してHTTP、考えられるすべてのタイプのリクエストを実行できるようにする非常に強力なクラスです。HTTP/2WebSocket

さらに、これらのクラスを使用して、同期および非同期の両方の http リクエストを行うことができます。

http リクエストの作成は次の部分で構成されます。

  1. オブジェクトを作成するHttpClient
  2. オブジェクトを作成するHttpRequest
  3. send()orメソッドを使用してリクエストを送信するsendAsync()
  4. 応答処理HttpResponse

そのようなリクエストの例:


 HttpClient client = HttpClient.newBuilder()
        .version(Version.HTTP_1_1)
        .followRedirects(Redirect.NORMAL)
        .connectTimeout(Duration.ofSeconds(20))
        .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
        .authenticator(Authenticator.getDefault())
        .build();
 
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body()); 

1.2 宣言的アプローチ

上の例では、コードを記述するためのいわゆる宣言型アプローチの例が示されています。例の最初の部分を見てみましょう。


 HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();

このコードを古典的なスタイルで記述すると次のようになります。


HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setProxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)));
client.setAuthenticator(Authenticator.getDefault());

コード内で宣言的アプローチを使用すると、2 つのことが変わります。 まず、すべてのクラス メソッドはHttpClient 独自のオブジェクトを返すため、コードをチェーンの形式で編成できます。

古典的なコード:

HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setAuthenticator(Authenticator.getDefault());
チェーンとして:

HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
各メソッドを別の行に転送します (これは 1 つの長いステートメントです)。

HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

次に、接頭辞がメソッドから削除されset、コードをさらにコンパクトに記述できるようになります。

だった

HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

となりました

HttpClient client = HttpClient.new()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.authenticator(Authenticator.getDefault());
    

このようなコードは、書くのが難しくても、読むのは簡単です。

そして、もう一つ重要な点があります。この例では、Builder パターンが使用されました。オブジェクトの作成が複雑なプロセスになるシナリオがあります。したがって、彼らはそれを形式化することを好みます。つまり、条件付きメソッド呼び出しで始まりbegin()、条件付きメソッド呼び出しで終わりますend()

私たちが分析した例では、メソッドはHttpClient.newBuilder()オブジェクトHttpClient.Builder(これは class の内部ユーティリティ クラスHttpClient) を返します。このタイプのすべてのメソッドは、version()このサービス オブジェクト上でのみ呼び出されます。メソッドの呼び出しは、build()オブジェクトの構築の終了を示し、 object を返しますHttpClient

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION