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 でなければエラーを返します。
Future で HTTP クライアントを使用すると、HttpClientResponse() メソッドは応答を受信するとすぐにバッファーを生成します。これを回避するには、(例にあるように)event-loop で future の構成が生じるか、応答を一時停止して再開する必要があります。