4.6.2.2. アプリケーションの Eclipse Vert.x HTTP クライアントへの移行
HTTP クライアントは、HTTP の対話を詳細に制御し、HTTP プロトコルに焦点をあてます。
Eclipse Vert.x 4 で HTTP クライアントが更新され、改善されました。
- より少ない対話による簡素化された API
- 強固なエラー処理
- HTTP/1 の接続リセットのサポート
HTTP クライアント API の更新は以下のとおりです。
-
HttpClientRequest
で、get()
、delete()
、put()
などのメソッドが削除されました。代わりにHttpClientRequest> request(HttpMethod method, …)
メソッドを使用してください。 -
要求または応答が可能になると、
HttpClientRequest
インスタンスが作成されます。たとえば、HttpClientRequest
インスタンスは、クライアントがサーバーに接続するか、プールから接続を再利用するときに作成されます。
4.6.2.2.1. シンプルな要求の送信
以下の例は、Eclipse Vert.x 3.x リリースで GET 要求を送信する方法を示しています。
HttpClientRequest request = client.get(80, "example.com", "/", response -> { int statusCode = response.statusCode(); response.exceptionHandler(err -> { // Handle connection error, for example, connection closed }); response.bodyHandler(body -> { // Handle body entirely }); }); request.exceptionHandler(err -> { // Handle connection error OR response error }); request.end();
以下の例は、Eclipse Vert.x 4 で GET 要求を送信する方法を示しています。
client.request(HttpMethod.GET, 80, "example.com", "/", ar -> { if (ar.succeeded()) { HttpClientRequest = ar.result(); request.send(ar2 -> { if (ar2.succeeded()) { HttpClientResponse = ar2.result(); int statusCode = response.statusCode(); response.body(ar3 -> { if (ar3.succeeded()) { Buffer body = ar3.result(); // Handle body entirely } else { // Handle server error, for example, connection closed } }); } else { // Handle server error, for example, connection closed } }); } else { // Connection error, for example, invalid server or invalid SSL certificate } });
新しい HTTP クライアントでエラー処理が優れていることが分かります。
以下の例は、Eclipse Vert.x 4 の GET 操作で future 構成を使用する方法を示しています。
Future<Buffer> fut = client.request(HttpMethod.GET, 80, "example.com", "/") .compose(request -> request.send().compose(response -> { int statusCode = response.statusCode(); if (statusCode == 200) { return response.body(); } else { return Future.failedFuture("Unexpectd status code"); } }) }); fut.onComplete(ar -> { if (ar.succeeded()) { Buffer body = ar.result(); // Handle body entirely } else { // Handle error } });
今後の構成により、例外処理が改善されます。この例では、ステータスコードが 200 かどうかを確認し、200 でないとエラーを返します。
future で HTTP クライアントを使用すると、HttpClientResponse()
メソッドは応答を受信するとすぐにバッファーを生成し始めます。これを回避するには、(例にあるように) event-loop で future の構成が生じるか、応答を一時停止して再開する必要があります。