Início > Programação > Implementação de um Cliente RESTEasy

Implementação de um Cliente RESTEasy

Escrevi um artigo para demonstrar como criar um mecanismo de autorização com token no RESTEasy. Fiz a implementação do lado do servidor e testei com o SOAPUI, mas nesse artigo vou demonstrar a implementação de um cliente Java que utiliza aqueles serviços que foram disponibilizados.

Primeiro, vamos criar as entidades do nosso modelo utilizando as anotações do Jackson. Você poderia trabalhar direto com String ou manipular o JSON manualmente, mas há boas bibliotecas para fazer essa conversão automaticamente. Vamos criar uma classe para representar a autenticação que será enviada ao método específico do endpoint e outra para representar a autorização, que é a resposta do endpoint que contém o token de autorização que deverá ser utilizado nas chamadas aos demais web services.

@JsonIgnoreProperties(ignoreUnknown = true)
public class Autenticacao {
	@JsonProperty("usuario")
	private String usuario;
	@JsonProperty("senha")
	private String senha;
}

@JsonIgnoreProperties(ignoreUnknown = true)
public class Autorizacao {
   @JsonProperty("token")
   private String token;
}

O primeiro método que criaremos é aquele que consome a autenticação e produz uma instância da classe Autorizacao a partir do JSON retornado pelo web service. Nosso endpoint responde no endereço http://localhost:8080/endpoint e faremos uma chamada POST para enviar os dados da autenticação no cabeçalho da request.

   public Autorizacao autenticar() throws Exception  {
      Autenticacao autenticacao = new Autenticacao();
      autenticacao.setUsuario("usuario");
      autenticacao.setSenha("senha");
      Entity<Autenticacao> entity = 
         Entity.entity(autenticacao, MediaType.APPLICATION_JSON);
      ResteasyClient client = new ResteasyClientBuilder().build();
      ResteasyWebTarget target = client.
         target("http://localhost:8080/endpoint").
         path("/autenticar/");
      Response response = target.request(MediaType.APPLICATION_JSON).
         post(entity);
      String value = response.readEntity(String.class);
      response.close();
      ObjectMapper map = new ObjectMapper();
      return map.readValue(value, Autorizacao.class);
   }

O header da request ficará mais ou menos assim:

POST http://localhost:8080/endpoint/autenticar/ HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 51
Host: localhost:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.7)
{
	"usuario" : "admin",
	"senha" : "1234"
}

A resposta do web service será assim:

{
   "token": "81FE2DFA7A9A822D5EBA0A7B1ABA2CBDB7307B1D8A5869CDBEB64B47DA453AE3"
}

Agora que obtivemos um token que autoriza a utilização dos web services durante “T” unidades de tempo supondo que essa validade esteja implementada no servidor, vamos listar os usuários disponíveis com uma chamada GET cujo cabeçalho conterá um atributo “Token”.

@JsonIgnoreProperties(ignoreUnknown = true)
public class Usuario {
	@JsonProperty("nome")
	private String nome;
}
   public List<Usuario> listarUsuarios(Autorizacao autorizacao)
      throws Exception {
      ResteasyClient client = new ResteasyClientBuilder().build();
      ResteasyWebTarget target = client.
         target("http://localhost:8080/endpoint").
         path("/usuario/listar/");
      Response response = 
         target.request(MediaType.APPLICATION_JSON).
         header("Token", autorizacao.getToken()).get();
      String value = response.readEntity(String.class);
      response.close();
      ObjectMapper map = new ObjectMapper();
      Map<String, List<Usuario>> mapItens = map.readValue(value,
         new TypeReference<Map<String, List<Usuario>>>() {
      });
      return mapItens.get("usuarios");
   }

O header da request ficará assim.

GET http://localhost:8080/endpoint/usuario/listar/ HTTP/1.1
Accept-Encoding: gzip,deflate
Token: 81FE2DFA7A9A822D5EBA0A7B1ABA2CBDB7307B1D8A5869CDBEB64B47DA453AE3
Host: localhost:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.7)

A resposta do web service será assim:

{
   "usuarios": [   
      { "nome": "José da Silva" },
      { "nome": "Mário de Souza" }
   ]
}

Por fim, vamos testar nosso cliente.

@Test
public void listarUsuarios throws Exception {
   WSClient client = new WSClient();
   Autorizacao autorizacao = client.autenticar();
   List<Usuario> usuarios = client.listarUsuarios(autorizacao);
   usuarios.stream().forEach((u) -> { System.out.println(u.getNome()); });
}

Referências

1. [https://atitudereflexiva.wordpress.com/2016/10/03/implementacao-de-autorizacao-com-token-utilizando-resteasy/]
2. [https://examples.javacodegeeks.com/enterprise-java/rest/resteasy/json-example-with-resteasy-jackson/]
3. [http://stackoverflow.com/questions/22095289/basic-authentication-with-resteasy-client]
4. [http://stackoverflow.com/questions/33241363/how-send-list-as-query-param-using-resteasy-client]
5. [http://www.concretepage.com/webservices/resteasy-3/jax-rs-resteasy-3-form-to-post-applicationx-www-form-urlencoded-content-type]
6. [http://howtodoinjava.com/resteasy/jax-rs-2-0-resteasy-3-0-2-final-client-api-example/]
7. [http://stackoverflow.com/questions/18520654/how-do-i-send-json-to-an-external-api-using-resteasy]

Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: