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/2e 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