1.1 Panimula sa HttpClient
Simula sa JDK 11, nagdagdag ang mga developer ng Java platform ng isang makapangyarihang bagong tool sa JDK para sa paggawa ng mga kahilingan sa http, ang java.net.http
. Naglalaman ito ng apat na pangunahing klase:
- HttpClient
- HttpRequest
- HttpResponse
- web socket
Ito ay napakalakas na mga klase na nagbibigay-daan sa iyong gawin ang lahat ng posibleng uri ng mga kahilingan gamit ang HTTP
, HTTP/2
at WebSocket
.
Bilang karagdagan, maaari mong gamitin ang mga klase na ito upang gumawa ng parehong kasabay at asynchronous na mga kahilingan sa http.
Ang paggawa ng kahilingan sa http ay binubuo ng mga sumusunod na bahagi:
- Lumikha ng isang bagay
HttpClient
- Lumikha ng isang bagay
HttpRequest
- Pagpapadala ng kahilingan gamit ang
send()
o pamamaraansendAsync()
- Pagproseso ng tugon
HttpResponse
Isang halimbawa ng naturang kahilingan:
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 Deklarasyon na diskarte
Sa halimbawa sa itaas, makikita mo ang isang halimbawa ng tinatawag na declarative approach sa pagsulat ng code. Tingnan natin ang unang bahagi ng halimbawa:
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();
Ano ang magiging hitsura ng code na ito na nakasulat sa klasikong istilo:
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());
Kapag gumagamit ng deklaratibong diskarte sa code, dalawang bagay ang nagbabago. Una , lahat ng mga pamamaraan ng klase HttpClient
ay nagbabalik ng kanilang sariling bagay , na nagpapahintulot sa iyo na ayusin ang code sa anyo ng mga kadena.
Klasikong code: |
---|
|
Bilang isang kadena: |
|
Inilipat namin ang bawat pamamaraan sa isang hiwalay na linya (ito ay isang mahabang pahayag) |
|
Pangalawa , ang prefix ay tinanggal mula sa mga pamamaraan set
, na nagbibigay-daan sa iyo upang magsulat ng code nang mas compact:
ay |
---|
|
Ito ay naging |
|
Ang ganitong code ay mas madaling basahin, bagama't mas mahirap isulat.
At isa pang mahalagang punto. Sa halimbawang ito, ginamit ang pattern ng Tagabuo. May mga sitwasyon kung saan ang paglikha ng isang bagay ay isang kumplikadong proseso. Samakatuwid, mas gusto nilang gawing pormal ito: nagsisimula ito sa isang conditional method call begin()
at nagtatapos sa conditional method call end()
.
Sa halimbawang sinuri namin, ang pamamaraan HttpClient.newBuilder()
ay nagbabalik ng isang bagay HttpClient.Builder
(ito ay isang panloob na klase ng utility ng klase HttpClient
). Ang lahat ng mga pamamaraan ng uri version()
ay tinatawag lamang sa bagay na ito ng serbisyo. Buweno, ang tawag ng pamamaraan build()
ay nagmamarka ng pagtatapos ng pagtatayo ng bagay at ibinabalik ang bagay HttpClient
.