0% acharam este documento útil (0 voto)
5 visualizações8 páginas

Requisições REST em Java: Comparativo 8, 11, 17

O artigo discute boas práticas e implementações de requisições REST em Java, comparando as versões 8, 11 e 17. Destaca a transição do uso de HttpURLConnection no Java 8 para HttpClient nas versões 11 e 17, que oferece melhorias em performance e simplicidade. Além disso, enfatiza a importância de autenticação segura e boas práticas para otimização de aplicações REST.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
5 visualizações8 páginas

Requisições REST em Java: Comparativo 8, 11, 17

O artigo discute boas práticas e implementações de requisições REST em Java, comparando as versões 8, 11 e 17. Destaca a transição do uso de HttpURLConnection no Java 8 para HttpClient nas versões 11 e 17, que oferece melhorias em performance e simplicidade. Além disso, enfatiza a importância de autenticação segura e boas práticas para otimização de aplicações REST.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Tipos de Requisição REST em Java

Comparação entre Java 8, 11 e 17


Este artigo apresenta as boas práticas e implementações performáticas de requisições
REST em Java, comparando as versões 8, 11 e 17.
Também destacaremos as chamadas POST, PUT, GET e DELETE, abordando as
diferentes formas de autenticação, como Basic Auth, JWT e autenticação via usuário e
senha.

1. Java 8: Uso de HttpURLConnection

No Java 8, a abordagem padrão para requisições HTTP era o HttpURLConnection.


Embora funcional, ela gera muito código boilerplate, o que dificulta a manutenção e pode
comprometer a performance, especialmente em requisições complexas ou assíncronas.

GET Request com HttpURLConnection (Basic Auth):


URL url = new URL("[Link]
HttpURLConnection connection = (HttpURLConnection) [Link]();
[Link]("GET");
[Link]("Authorization", "Basic " +
[Link]().encodeToString(( "user:password").getBytes()));

int responseCode = [Link]();


if (responseCode == HttpURLConnection.HTTP_OK) {

BufferedReader in = new BufferedReader(new


InputStreamReader([Link]()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = [Link]()) != null) {

[Link](inputLine);
}
[Link]();
}
POST Request:
URL url = new URL("[Link]
HttpURLConnection connection = (HttpURLConnection) [Link]();
[Link]("POST");
[Link](true);
[Link]("Content-Type", "application/json");

String jsonInputString = "{\"name\": \"John\", \"age\": 30}";


try(OutputStream os = [Link]()) {

byte[] input = [Link]("utf-8");


[Link](input, 0, [Link]);
}
int responseCode = [Link]();

PUT Request:
URL url = new URL("[Link]
HttpURLConnection connection = (HttpURLConnection) [Link]();
[Link]("PUT");
[Link](true);
[Link]("Content-Type", "application/json");

String jsonInputString = "{\"name\": \"John Updated\", \"age\": 31}";


try(OutputStream os = [Link]()) {

byte[] input = [Link]("utf-8");


[Link](input, 0, [Link]);
}
int responseCode = [Link]();
DELETE Request
URL url = new URL("[Link]
HttpURLConnection connection = (HttpURLConnection) [Link]();
[Link]("DELETE");
int responseCode = [Link]();

Referências:

• Documentação oficial HttpURLConnection

2. Java 11: Uso de HttpClient

O HttpClient, introduzido no Java 11, melhora a experiência de desenvolvimento, com


suporte nativo a operações síncronas e assíncronas, reduzindo significativamente a
quantidade de código necessário.

GET Request (Basic Auth):


HttpClient client = [Link]();
HttpRequest request = [Link]()
.uri([Link]("[Link]
.header("Authorization", "Basic " +
[Link]().encodeToString(( "user:password").getBytes()))
.GET()
.build();

HttpResponse<String> response = [Link](request,


[Link]());
[Link]([Link]());

POST Request:
HttpClient client = [Link]();
HttpRequest request = [Link]()
.uri([Link]("[Link]
.header("Content-Type", "application/json")
.POST([Link]( "{\"name\": \"John\", \"age\": 30}"))
.build();
HttpResponse<String> response = [Link](request,
[Link]());
[Link]([Link]());

PUT Request:
HttpClient client = [Link]();
HttpRequest request = [Link]()
.uri([Link]("[Link]
.header("Content-Type", "application/json")
.PUT([Link]( "{\"name\": \"John Updated\", \"age\": 31}"))
.build();
HttpResponse<String> response = [Link](request,
[Link]());
[Link]([Link]());

DELETE Request:
HttpClient client = [Link]();
HttpRequest request = [Link]()
.uri([Link]("[Link]
.DELETE()
.build();

HttpResponse<String> response = [Link](request,


[Link]());
[Link]([Link]());

Referências:

• Download Java 11 (Oracle)


• Documentação HttpClient Java 11
3. Java 17: Uso de HttpClient com Melhorias
4.

O Java 17 mantém o HttpClient como padrão para requisições REST e traz melhorias
no gerenciamento de memória, performance de garbage collection, e suporte a HTTP/2,
tornando-o ideal para sistemas de alto desempenho.

GET Request (JWT Auth):


HttpClient client = [Link]()
.version([Link].HTTP_2)
.build();

HttpRequest request = [Link]()


.uri([Link]("[Link]
.header("Authorization", "Bearer " + jwtToken)
.GET()
.build();

HttpResponse<String> response = [Link](request,


[Link]());
[Link]([Link]());

POST Request:
HttpClient client = [Link]().build();
HttpRequest request = [Link]()
.uri([Link]("[Link]
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + jwtToken)
.POST([Link]( "{\"name\": \"John\", \"age\": 30}"))
.build();

HttpResponse<String> response = [Link](request,


[Link]());
[Link]([Link]());
PUT Request:
HttpClient client = [Link]().build();
HttpRequest request = [Link]()
.uri([Link]("[Link]
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + jwtToken)
.PUT([Link]( "{\"name\": \"John Updated\", \"age\": 31}"))
.build();

HttpResponse<String> response = [Link](request,


[Link]());
[Link]([Link]());

DELETE Request:
HttpClient client = [Link]().build();
HttpRequest request = [Link]()
.uri([Link]("[Link]
.header("Authorization", "Bearer " + jwtToken)
.DELETE()
.build();

HttpResponse<String> response = [Link](request,


[Link]());
[Link]([Link]());

Referências:

• Download Java 17 (Oracle)


• Documentação HttpClient Java 17
Boas Práticas
• Use HttpClient para Melhor Performance: A partir do Java 11, o HttpClient
oferece suporte a requisições assíncronas e maior simplicidade de código.
• Timeouts: Configure timeouts adequados para evitar ociosidade em operações
de I/O.
HttpClient client = [Link]()
.connectTimeout([Link](10))
.build();
• Requisições Assíncronas: Utilize sendAsync() para operações não bloqueantes
em aplicações de alta escala.
• HTTPS e JWT para Segurança: Sempre utilize HTTPS e tokens JWT para
proteger credenciais e dados sensíveis.
• Conexões Persistentes: Configure conexões persistentes para reduzir a
sobrecarga de criação de novas conexões TCP.

Dependências e Links para Download


JWT: Para manipulação de tokens JWT em Java, recomenda-se a biblioteca Java JWT
(Auth0).

Maven

xml
<dependency>

<groupId>com.auth0</groupId>

<artifactId>java-jwt</artifactId>

<version>3.18.1</version>

</dependency>

Gradle

implementation 'com.auth0:java-jwt:3.18.1'
Conclusão

A evolução do Java trouxe melhorias substanciais para a implementação de requisições


REST, com a introdução do HttpClient a partir do Java 11, eliminando a necessidade de
bibliotecas externas e tornando o código mais performático e conciso.
O Java 8, utilizando HttpURLConnection, apresenta uma solução funcional, porém
verbosa e menos eficiente em termos de otimização de I/O e suporte a operações
assíncronas.
No Java 11 e 17, o HttpClient introduz capacidades nativas como suporte ao HTTP/2,
operações assíncronas por meio de CompletableFuture, e uma API de uso mais intuitiva
e flexível, garantindo uma experiência de desenvolvimento muito mais ágil e
performática, principalmente para aplicações de alta escala.
O suporte a POST, PUT, GET e DELETE com autenticação JWT, Basic Auth e
autenticação via usuário e senha tornam-se significativamente mais simples e com
menor propensão a falhas de código.
Com a introdução de melhorias contínuas no gerenciamento de recursos e garbage
collection no Java 17, as operações de rede podem ser executadas com maior eficiência
de uso de memória e tempo de resposta, consolidando essa versão como uma escolha
robusta para sistemas distribuídos e de alta demanda de performance.
Além disso, boas práticas como a implementação de timeouts apropriados, o uso de
HTTPS e tokens de segurança (JWT), e a utilização de conexões persistentes
contribuem diretamente para a escalabilidade e segurança das aplicações REST.
Portanto, adotar essas práticas não apenas aprimora a segurança, mas também reduz
significativamente o tempo de latência e o overhead da aplicação.
A transição do Java 8 para o Java 11 ou 17, além de ser recomendada por motivos de
suporte de longo prazo (LTS), oferece ganhos claros em termos de produtividade e
eficiência.
Para desenvolvedores que lidam com serviços REST, é crucial adaptar-se a essas
inovações para garantir a melhor performance e manutenibilidade de seus sistemas.

EducaCiência FastCode para a comunidade

Você também pode gostar