CodeGym /Java Course /Modul 3 /HttpClient baru

HttpClient baru

Modul 3
Level 10 , Pelajaran 0
Tersedia

1.1 Pengantar HttpClient

Dimulai dengan JDK 11, pengembang platform Java menambahkan alat baru yang ampuh ke JDK untuk membuat permintaan http, file java.net.http. Ini berisi empat kelas utama:

  • HttpClient
  • HttpRequest
  • HttpResponse
  • soket web

Ini adalah kelas yang sangat kuat yang memungkinkan Anda untuk melakukan semua kemungkinan jenis permintaan menggunakan HTTP, HTTP/2dan WebSocket.

Selain itu, Anda dapat menggunakan kelas ini untuk membuat permintaan http sinkron dan asinkron.

Membuat permintaan http terdiri dari bagian-bagian berikut:

  1. Buat objekHttpClient
  2. Buat objekHttpRequest
  3. Mengirim permintaan menggunakan metode send()atausendAsync()
  4. Pemrosesan responsHttpResponse

Contoh permintaan seperti itu:


 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

Pada contoh di atas, Anda melihat contoh yang disebut pendekatan deklaratif untuk menulis kode. Mari kita lihat contoh bagian pertama:


 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();

Seperti apa kode ini jika 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());

Saat menggunakan pendekatan deklaratif dalam kode, ada dua hal yang berubah. Pertama , semua metode kelas HttpClient mengembalikan objeknya sendiri , yang memungkinkan Anda mengatur kode dalam bentuk rantai.

Kode klasik:

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

HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
Kami mentransfer setiap metode ke baris terpisah (ini adalah satu pernyataan panjang)

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

Kedua , awalan dihapus dari metode set, yang memungkinkan Anda menulis kode dengan lebih ringkas:

Dulu

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

Itu menjadi

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

Kode seperti itu lebih mudah dibaca, meskipun lebih sulit untuk ditulis.

Dan satu poin penting lagi. Dalam contoh ini, pola Builder digunakan. Ada skenario di mana pembuatan objek merupakan proses yang kompleks. Oleh karena itu, mereka lebih memilih untuk memformalkannya: dimulai dengan pemanggilan metode bersyarat begin()dan diakhiri dengan pemanggilan metode bersyarat end().

Dalam contoh yang kami analisis, metode HttpClient.newBuilder()mengembalikan objek HttpClient.Builder(ini adalah kelas utilitas internal dari kelas HttpClient). Semua metode bertipe version()dipanggil hanya pada objek layanan ini. Nah, pemanggilan method build()menandai akhir dari konstruksi objek dan mengembalikan object HttpClient.

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION