Nuevo cliente Http

Disponible

1.1 Introducción a HttpClient

A partir de JDK 11, los desarrolladores de la plataforma Java agregaron una nueva y poderosa herramienta a JDK para realizar solicitudes http, el archivo java.net.http. Contiene cuatro clases clave:

  • Cliente Http
  • Solicitud Http
  • HttpRespuesta
  • zócalo web

Estas son clases muy poderosas que le permiten realizar todos los tipos posibles de solicitudes utilizando los protocolos HTTP, HTTP/2y WebSocket.

Además, puede utilizar estas clases para realizar solicitudes http sincrónicas y asincrónicas.

Hacer una solicitud http consta de las siguientes partes:

  1. Crear un objetoHttpClient
  2. Crear un objetoHttpRequest
  3. Envío de una solicitud mediante el método send()osendAsync()
  4. Procesamiento de respuestasHttpResponse

Un ejemplo de tal solicitud:

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 Enfoque declarativo

En el ejemplo anterior, verá un ejemplo del llamado enfoque declarativo para escribir código. Veamos la primera parte del ejemplo:

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

Cómo se vería este código escrito en estilo clásico:

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

Cuando se utiliza el enfoque declarativo en el código, cambian dos cosas. En primer lugar , todos los métodos de clase HttpClient devuelven su propio objeto , lo que le permite organizar el código en forma de cadenas.

Código clásico:
HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setAuthenticator(Authenticator.getDefault());
Como una cadena:
HttpClient client = HttpClient.new() .setVersion(Version.HTTP_1_1) .setFollowRedirects(Redirect.NORMAL). setConnectTimeout(Duration.ofSeconds(20)) .setAuthenticator(Authenticator.getDefault());
Transferimos cada método a una línea separada (esta es una declaración larga)
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());

En segundo lugar , el prefijo se elimina de los métodos set, lo que le permite escribir código de forma aún más compacta:

Era
HttpClient client = HttpClient.new()
.setVersion(Version.HTTP_1_1)
.setFollowRedirects(Redirect.NORMAL)
.setConnectTimeout(Duration.ofSeconds(20))
.setAuthenticator(Authenticator.getDefault());
Se convirtió
HttpClient client = HttpClient.new()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.authenticator(Authenticator.getDefault());

Dicho código es más fácil de leer, aunque más difícil de escribir.

Y un punto más importante. En este ejemplo, se utilizó el patrón Builder. Hay escenarios en los que crear un objeto es un proceso complejo. Por lo tanto, prefieren formalizarlo: comienza con una llamada de método condicional begin()y termina con una llamada de método condicional end().

En el ejemplo que analizamos, el método HttpClient.newBuilder()devuelve un objeto HttpClient.Builder(esta es una clase de utilidad interna de la clase HttpClient). Todos los métodos del tipo version()se llaman solo en este objeto de servicio. Bueno, la llamada del método build()marca el final de la construcción del objeto y devuelve el objeto HttpClient.

Comentarios
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios