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/2
et 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 :
- Créer un objet
HttpClient
- Créer un objet
HttpRequest
- Envoi d'une requête à l'aide de la méthode
send()
ousendAsync()
- Traitement des réponses
HttpResponse
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 : |
---|
|
En chaîne : |
|
Nous transférons chaque méthode sur une ligne distincte (il s'agit d'une longue déclaration) |
|
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 |
---|
|
C'est devenu |
|
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
.
GO TO FULL VERSION