CodeGym/Java Course/Module 3/Nieuwe HttpClient

Nieuwe HttpClient

Beschikbaar

1.1 Inleiding tot HttpClient

Vanaf JDK 11 hebben de ontwikkelaars van het Java-platform een ​​krachtige nieuwe tool aan de JDK toegevoegd voor het maken van http-verzoeken, de java.net.http. Het bevat vier hoofdklassen:

  • HttpClient
  • HttpRequest
  • Http-antwoord
  • web-socket

Dit zijn zeer krachtige klassen waarmee u alle mogelijke soorten verzoeken kunt uitvoeren met behulp van de HTTP, HTTP/2en WebSocket.

Bovendien kunt u deze klassen gebruiken om zowel synchrone als asynchrone http-verzoeken te doen.

Het maken van een http-request bestaat uit de volgende onderdelen:

  1. Maak een voorwerpHttpClient
  2. Maak een voorwerpHttpRequest
  3. Een verzoek verzenden met behulp van de send()of methodesendAsync()
  4. Reactie verwerkingHttpResponse

Een voorbeeld van zo'n verzoek:

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 Declaratieve benadering

In het bovenstaande voorbeeld zie je een voorbeeld van de zogenaamde declaratieve benadering van het schrijven van code. Laten we eens kijken naar het eerste deel van het voorbeeld:

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

Hoe deze code eruit zou zien, geschreven in klassieke stijl:

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

Bij gebruik van de declaratieve benadering in de code veranderen er twee dingen. Ten eerste retourneren alle klassenmethoden HttpClient hun eigen object , waarmee u code in de vorm van kettingen kunt organiseren.

Klassieke code:
HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setAuthenticator(Authenticator.getDefault());
Als ketting:
HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
We verplaatsen elke methode naar een aparte regel (dit is een lange instructie)
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

Ten tweede wordt het voorvoegsel uit de methodes verwijderd set, waardoor je nog compacter code kunt schrijven:

Was
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());
Het werd
HttpClient client = HttpClient.new()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.authenticator(Authenticator.getDefault());

Dergelijke code is gemakkelijker te lezen, hoewel moeilijker te schrijven.

En nog een belangrijk punt. In dit voorbeeld is het Builder-patroon gebruikt. Er zijn scenario's waarbij het maken van een object een complex proces is. Daarom geven ze er de voorkeur aan het te formaliseren: het begint met een voorwaardelijke methodeaanroep begin()en eindigt met een voorwaardelijke methodeaanroep end().

HttpClient.newBuilder()In het voorbeeld dat we hebben geanalyseerd, retourneert de methode een object HttpClient.Builder(dit is een interne hulpprogrammaklasse van de klasse HttpClient). Alle methoden van het type version()worden alleen op dit serviceobject aangeroepen. Welnu, de aanroep van de methode build()markeert het einde van de constructie van het object en retourneert het object HttpClient.

Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen