CodeGym /Java kurs /Modul 3 /Ny HttpClient

Ny HttpClient

Modul 3
Nivå , Lekse
Tilgjengelig

1.1 Introduksjon til HttpClient

Fra og med JDK 11 la utviklerne av Java-plattformen til et kraftig nytt verktøy til JDK for å lage http-forespørsler, java.net.http. Den inneholder fire nøkkelklasser:

  • HttpClient
  • HttpRequest
  • HttpResponse
  • nettkontakt

Dette er veldig kraftige klasser som lar deg utføre alle mulige typer forespørsler ved å bruke HTTP, HTTP/2og WebSocket.

I tillegg kan du bruke disse klassene til å lage både synkrone og asynkrone http-forespørsler.

Å lage en http-forespørsel består av følgende deler:

  1. Lag et objektHttpClient
  2. Lag et objektHttpRequest
  3. Sende en forespørsel ved å bruke metoden send()ellersendAsync()
  4. SvarbehandlingHttpResponse

Et eksempel på en slik forespørsel:


 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 tilnærming

I eksemplet ovenfor ser du et eksempel på den såkalte deklarative tilnærmingen til å skrive kode. La oss ta en titt på den første delen av eksemplet:


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

Hvordan denne koden vil se ut skrevet i klassisk stil:


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

Når du bruker den deklarative tilnærmingen i koden, endres to ting. For det første HttpClient returnerer alle klassemetoder sitt eget objekt , som lar deg organisere kode i form av kjeder.

Klassisk kode:

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

HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
Vi overfører hver metode til en egen linje (dette er en lang uttalelse)

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

For det andre fjernes prefikset fra metodene set, noe som lar deg skrive kode enda mer kompakt:

Var

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

Det ble

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

Slik kode er lettere å lese, men vanskeligere å skrive.

Og enda et viktig poeng. I dette eksemplet ble Builder-mønsteret brukt. Det er scenarier der å lage et objekt er en kompleks prosess. Derfor foretrekker de å formalisere det: det starter med et betinget metodekall begin()og slutter med et betinget metodekall end().

I eksemplet vi analyserte HttpClient.newBuilder()returnerer metoden et objekt HttpClient.Builder(dette er en intern verktøyklasse i klassen HttpClient). Alle metoder av typen version()kalles bare på dette tjenesteobjektet. Vel, kallet til metoden build()markerer slutten på konstruksjonen av objektet og returnerer objektet HttpClient.

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