1.1 HttpClient bilan tanishish
JDK 11-dan boshlab Java platformasi ishlab chiquvchilari JDK-ga yangi kuchli vosita - HTTP so'rovlarini bajarish uchun java.net.http paketi qo'shishdi. U to'rtta asosiy klassni o'z ichiga oladi:
- HttpClient
- HttpRequest
- HttpResponse
- WebSocket
Bu juda kuchli klasslar bo'lib, HTTP, HTTP/2 va WebSocket protokollari yordamida barcha mumkin bo'lgan so'rovlarni bajarishga imkon beradi.
Bundan tashqari, bu klasslar yordamida sinxron va asinxron HTTP so'rovlarini bajarish mumkin.
HTTP so'rovi quyidagi qismlardan iborat:
HttpClientobyektini yaratishHttpRequestobyektini yaratishsend()yokisendAsync()metodlari yordamida so'rovni yuborishHttpResponsejavobini qayta ishlash
Mana bunday so'rovning misoli:
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 Deklarativ yondashuv
Yuqoridagi misolda sen kod yozishda deklarativ yondashuv deb ataladigan yondashuvning misolini ko'rmoqdasiz. Keling, misolning birinchi qismini ko'rib chiqaylik:
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();
Bu kod klassik uslubda qanday ko'rinishda bo'lardi:
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());
Deklarativ yondashuv ishlatilganda kodda ikkita narsa o'zgaradi. Birinchidan, HttpClient klassining barcha metodlari o'z obyektini qaytaradi, bu esa kodni zanjirlar shaklida tashkil qilish imkonini beradi.
| Klassik kod: |
|---|
|
| Zanjir shaklida: |
|
| Har bir metodni alohida qatorda yozamiz (bu bitta uzun statement) |
|
Ikkinchidan, metodlar prefiks set'ni olib tashlashadi, bu esa kodni yanada ixchamroq yozishni ta'minlaydi:
| Oldin |
|---|
|
| Hozir |
|
Bu kodni o'qish osonroq, garchi yozish qiyinroq bo'lsa.
Yana bir muhim nuqta. Bu misolda Builder deb nomlangan pattern (shablon) ishlatilgan. Obyekt yaratish - bu murakkab jarayon bo'lgan ssenariylar mavjud. Shuning uchun uni rasmiylashtirishni afzal ko'rishadi: u shartli begin() metodini chaqirish bilan boshlanadi va shartli end() metodini chaqirish bilan yakunlanadi.
Ko'rib turgan misolimizda HttpClient.newBuilder() metodi HttpClient.Builder obyektini qaytaradi (bu HttpClient klassining ichki xizmat ko'rsatuvchi klassi). version() turidagi barcha metodlar aynan shu xizmat ko'rsatuvchi obyektda chaqiriladi. Va build() metodini chaqirish ob'ekt qurilishini tugatishni belgilaydi va HttpClient ob'ektini qaytaradi.
GO TO FULL VERSION