1.1 Introdução ao HttpClient
A partir do JDK 11, os desenvolvedores da plataforma Java adicionaram uma nova ferramenta poderosa ao JDK para fazer solicitações http, o java.net.http
. Ele contém quatro classes principais:
- HttpClientName
- HttpRequest
- HttpResponse
- soquete da web
Essas são classes muito poderosas que permitem executar todos os tipos de solicitações possíveis usando o HTTP
, HTTP/2
e WebSocket
.
Além disso, você pode usar essas classes para fazer solicitações http síncronas e assíncronas.
Fazer uma solicitação http consiste nas seguintes partes:
- Criar um objeto
HttpClient
- Criar um objeto
HttpRequest
- Enviando uma solicitação usando o método
send()
ousendAsync()
- Processamento de resposta
HttpResponse
Um exemplo desse pedido:
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 Abordagem declarativa
No exemplo acima, você vê um exemplo da chamada abordagem declarativa para escrever código. Vamos dar uma olhada na primeira parte do exemplo:
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();
Como seria esse código escrito em estilo clássico:
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());
Ao usar a abordagem declarativa no código, duas coisas mudam. Em primeiro lugar , todos os métodos de classe HttpClient
retornam seu próprio objeto , o que permite organizar o código na forma de cadeias.
Código clássico: |
---|
|
Em cadeia: |
|
Transferimos cada método para uma linha separada (esta é uma instrução longa) |
|
Em segundo lugar , o prefixo foi removido dos métodos set
, o que permite que você escreva o código de forma ainda mais compacta:
Era |
---|
|
Tornou-se |
|
Esse código é mais fácil de ler, embora mais difícil de escrever.
E mais um ponto importante. Neste exemplo, o padrão Builder foi usado. Existem cenários em que criar um objeto é um processo complexo. Portanto, eles preferem formalizá-lo: começa com uma chamada de método condicional begin()
e termina com uma chamada de método condicional end()
.
No exemplo que analisamos, o método HttpClient.newBuilder()
retorna um objeto HttpClient.Builder
(essa é uma classe utilitária interna da classe HttpClient
). Todos os métodos do tipo version()
são chamados apenas neste objeto de serviço. Bom, a chamada do método build()
marca o fim da construção do objeto e retorna o objeto HttpClient
.
GO TO FULL VERSION