1.1 HttpClient'e Giriş
JDK 11'den başlayarak, Java platformunun geliştiricileri JDK'ya http istekleri yapmak için yeni ve güçlü bir araç olan java.net.http
. Dört temel sınıf içerir:
- HttpClient
- Http İsteği
- HttpResponse
- web soketi
Bunlar , ve HTTP
kullanarak olası tüm istek türlerini gerçekleştirmenize izin veren çok güçlü sınıflardır .HTTP/2
WebSocket
Ayrıca bu sınıfları hem senkron hem de asenkron http istekleri yapmak için kullanabilirsiniz.
Bir http isteği yapmak aşağıdaki bölümlerden oluşur:
- bir nesne oluştur
HttpClient
- bir nesne oluştur
HttpRequest
send()
veya yöntemini kullanarak istek göndermesendAsync()
- Yanıt işleme
HttpResponse
Böyle bir istek örneği:
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 Bildirimsel yaklaşım
Yukarıdaki örnekte, kod yazmak için sözde bildirimsel yaklaşımın bir örneğini görüyorsunuz. Örneğin ilk kısmına bir göz atalım:
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();
Klasik tarzda yazılmış bu kod nasıl görünürdü:
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());
Kodda bildirimsel yaklaşımı kullanırken iki şey değişir. İlk olarak , tüm sınıf yöntemleri, kodu zincirler biçiminde düzenlemenize olanak tanıyan HttpClient
kendi nesnesini döndürür .
Klasik kod: |
---|
|
Zincir olarak: |
|
Her yöntemi ayrı bir satıra aktarıyoruz (bu uzun bir ifadedir) |
|
ikinci olarak , önek yöntemlerden kaldırılır set
, bu da kodu daha kompakt bir şekilde yazmanıza olanak tanır:
oldu |
---|
|
Dönüştü |
|
Böyle bir kodun okunması daha kolaydır, ancak yazılması daha zordur.
Ve bir önemli nokta daha. Bu örnekte Builder modeli kullanılmıştır. Bir nesne oluşturmanın karmaşık bir süreç olduğu senaryolar vardır. Bu nedenle, resmileştirmeyi tercih ederler: koşullu bir yöntem çağrısı ile başlar begin()
ve koşullu bir yöntem çağrısı ile biter end()
.
İncelediğimiz örnekte, yöntem HttpClient.newBuilder()
bir nesne döndürür HttpClient.Builder
(bu, sınıfın dahili bir yardımcı sınıftır HttpClient
). Bu türdeki tüm yöntemler version()
yalnızca bu hizmet nesnesinde çağrılır. Yöntemin çağrılması, build()
nesnenin inşasının sonunu işaretler ve nesneyi döndürür HttpClient
.