Noul HttpClient

All lectures for RO purposes
Nivel , Lecţie
Disponibil

1.1 Introducere în HttpClient

Începând cu JDK 11, dezvoltatorii platformei Java au adăugat un nou instrument puternic la JDK pentru a face cereri http, java.net.http. Conține patru clase cheie:

  • HttpClient
  • HttpRequest
  • HttpResponse
  • priza web

Acestea sunt clase foarte puternice care vă permit să efectuați toate tipurile posibile de solicitări folosind HTTP, HTTP/2și WebSocket.

În plus, puteți utiliza aceste clase pentru a face atât solicitări http sincrone, cât și asincrone.

Efectuarea unei solicitări http constă din următoarele părți:

  1. Creați un obiectHttpClient
  2. Creați un obiectHttpRequest
  3. Trimiterea unei cereri folosind metoda send()sausendAsync()
  4. Procesarea răspunsuluiHttpResponse

Un exemplu de astfel de solicitare:


 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 Abordare declarativă

În exemplul de mai sus, vedeți un exemplu de așa-numită abordare declarativă a scrierii codului. Să aruncăm o privire la prima parte a exemplului:


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

Cum ar arăta acest cod scris în stil clasic:


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

Când utilizați abordarea declarativă în cod, două lucruri se schimbă. În primul rând , toate metodele de clasă HttpClient returnează propriul obiect , ceea ce vă permite să organizați codul sub formă de lanțuri.

Cod clasic:

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

HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
Transferăm fiecare metodă pe o linie separată (aceasta este o declarație lungă)

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

În al doilea rând , prefixul este eliminat din metode set, ceea ce vă permite să scrieți cod și mai compact:

A fost

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

A devenit

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

Un astfel de cod este mai ușor de citit, deși mai greu de scris.

Și încă un punct important. În acest exemplu, a fost folosit modelul Builder. Există scenarii în care crearea unui obiect este un proces complex. Prin urmare, preferă să-l oficializeze: începe cu un apel de metodă condiționat begin()și se termină cu un apel de metodă condiționat end().

În exemplul pe care l-am analizat, metoda HttpClient.newBuilder()returnează un obiect HttpClient.Builder(aceasta este o clasă de utilitate internă a clasei HttpClient). Toate metodele de acest tip version()sunt apelate doar pe acest obiect de serviciu. Ei bine, apelul metodei build()marchează sfârșitul construcției obiectului și returnează obiectul HttpClient.

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