CodeGym/Java kurs/Modul 3/Ny HttpClient

Ny HttpClient

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
  • Populær
  • Ny
  • Gammel
Du må være pålogget for å legge igjen en kommentar
Denne siden har ingen kommentarer ennå