1.1 Pengenalan kepada HttpClient
Bermula dengan JDK 11, pembangun platform Java menambah alat baharu yang berkuasa pada JDK untuk membuat permintaan http, java.net.http
. Ia mengandungi empat kelas utama:
- HttpClient
- HttpRequest
- HttpResponse
- soket web
Ini adalah kelas yang sangat berkuasa yang membolehkan anda melaksanakan semua jenis permintaan yang mungkin menggunakan HTTP
, HTTP/2
dan WebSocket
.
Selain itu, anda boleh menggunakan kelas ini untuk membuat permintaan http segerak dan tak segerak.
Membuat permintaan http terdiri daripada bahagian berikut:
- Buat objek
HttpClient
- Buat objek
HttpRequest
- Menghantar permintaan menggunakan kaedah
send()
atausendAsync()
- Pemprosesan tindak balas
HttpResponse
Contoh permintaan sedemikian:
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 Pendekatan deklaratif
Dalam contoh di atas, anda melihat contoh pendekatan deklaratif yang dipanggil untuk menulis kod. Mari kita lihat bahagian pertama contoh:
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();
Apakah rupa kod ini yang ditulis dalam gaya klasik:
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());
Apabila menggunakan pendekatan deklaratif dalam kod, dua perkara berubah. Pertama , semua kaedah kelas HttpClient
mengembalikan objek mereka sendiri , yang membolehkan anda menyusun kod dalam bentuk rantai.
Kod klasik: |
---|
|
Sebagai rantai: |
|
Kami memindahkan setiap kaedah ke baris yang berasingan (ini adalah satu pernyataan panjang) |
|
Kedua , awalan dialih keluar daripada kaedah set
, yang membolehkan anda menulis kod dengan lebih padat:
Adakah |
---|
|
Ia menjadi |
|
Kod sedemikian lebih mudah dibaca, walaupun lebih sukar untuk ditulis.
Dan satu lagi perkara penting. Dalam contoh ini, corak Builder telah digunakan. Terdapat senario di mana mencipta objek adalah proses yang kompleks. Oleh itu, mereka lebih suka untuk memformalkannya: ia bermula dengan panggilan kaedah bersyarat begin()
dan berakhir dengan panggilan kaedah bersyarat end()
.
Dalam contoh yang kami analisis, kaedah HttpClient.newBuilder()
mengembalikan objek HttpClient.Builder
(ini ialah kelas utiliti dalaman kelas HttpClient
). Semua kaedah jenis version()
dipanggil hanya pada objek perkhidmatan ini. Nah, panggilan kaedah build()
menandakan tamatnya pembinaan objek dan mengembalikan objek HttpClient
.