CodeGym/Cours Java/Module 3/Nouveau client HTTP

Nouveau client HTTP

Disponible

1.1 Introduction à HttpClient

À partir de JDK 11, les développeurs de la plate-forme Java ont ajouté un nouvel outil puissant au JDK pour effectuer des requêtes http, le java.net.http. Il contient quatre classes clés :

  • Client HTTP
  • Demande HTTP
  • HttpResponse
  • prise internet

Ce sont des classes très puissantes qui permettent d'effectuer tous les types de requêtes possibles à l'aide des classes HTTP, HTTP/2et WebSocket.

De plus, vous pouvez utiliser ces classes pour effectuer des requêtes http synchrones et asynchrones.

Faire une requête http comprend les parties suivantes :

  1. Créer un objetHttpClient
  2. Créer un objetHttpRequest
  3. Envoi d'une requête à l'aide de la méthode send()ousendAsync()
  4. Traitement des réponsesHttpResponse

Un exemple d'une telle demande :

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 Approche déclarative

Dans l'exemple ci-dessus, vous voyez un exemple de l'approche dite déclarative de l'écriture de code. Examinons la première partie de l'exemple :

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

À quoi ressemblerait ce code écrit dans un style classique :

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

Lorsque vous utilisez l'approche déclarative dans le code, deux choses changent. Tout d'abord , toutes les méthodes de classe HttpClient renvoient leur propre objet , ce qui vous permet d'organiser le code sous forme de chaînes.

Code classique :
HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setAuthenticator(Authenticator.getDefault());
En chaîne :
HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
Nous transférons chaque méthode sur une ligne distincte (il s'agit d'une longue déclaration)
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

Deuxièmement , le préfixe est supprimé des méthodes set, ce qui permet d'écrire du code de manière encore plus compacte :

Était
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());
C'est devenu
HttpClient client = HttpClient.new()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.authenticator(Authenticator.getDefault());

Un tel code est plus facile à lire, bien que plus difficile à écrire.

Et encore un point important. Dans cet exemple, le modèle Builder a été utilisé. Il existe des scénarios où la création d'un objet est un processus complexe. Par conséquent, ils préfèrent le formaliser : il commence par un appel de méthode conditionnel begin()et se termine par un appel de méthode conditionnel end().

Dans l'exemple que nous avons analysé, la méthode HttpClient.newBuilder()renvoie un objet HttpClient.Builder(il s'agit d'une classe utilitaire interne de la classe HttpClient). Toutes les méthodes du type version()sont appelées uniquement sur cet objet de service. Eh bien, l'appel de la méthode build()marque la fin de la construction de l'objet et renvoie l'objet HttpClient.

Commentaires
  • Populaires
  • Nouveau
  • Anciennes
Tu dois être connecté(e) pour laisser un commentaire
Cette page ne comporte pas encore de commentaires