Arquivo

Archive for março \18\UTC 2017

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]

O Caminho do Determinado é Obscurecido pela Inveja dos Medíocres

Determinação é uma forte inclinação ou desejo de alcançar algo ou de realizar alguma coisa. A pessoa determinada tem metas claras e definidas e uma convicção plena de que irá alcançá-las – é daí que vem sua motivação. O caminho que nos leva de onde estamos para onde queremos chegar é construído por conquistas menores que vão se acumulando para pavimentar com materiais cada vez mais nobres a estrada à nossa frente. Claro, temos que saber para onde estamos indo e onde estamos pisando para escolher o melhor caminho, caso contrário vale a resposta que o gato deu para a Alice em Alice no País das Maravilhas:

Se não sabe para onde está indo, qualquer caminho serve.

Como são inoportunas as pessoas que nos elogiam no momento errado ou da forma errada dizendo que temos jeito para alguma coisa, como matemática e música, por exemplo. Uma coisa é elogiar uma criança que mostre determinadas habilidades em seus primeiros anos de vida; outra, completamente diferente, é elogiar um adulto que já acumula algumas dezenas de carnavais. Essas pessoas não percebem que esse “jeito”, essa “habilidade”, esse “nasceu pra isso” na verdade é o resultado do esforço, das muitas horas de estudo, das poucas horas de sono, de querer atingir a excelência passando pela superação das nossas limitações. Algo que parece um elogio sincero revela a inveja de quem quer o que nós conquistamos, mas sem o sofrimento que tivemos que digerir como pagamento pelo sucesso.

A inveja é a homenagem que o medíocre presta ao mérito. José Ingenieros

Algumas pessoas chegam ao cúmulo de alegar que as habilidades de alguém que se destaca são provenientes de ação divina. Não nego os benefícios da estimulação de uma força interior – – para a organização de um estado mental positivo mesmo entre aqueles que são referências em suas áreas de atuação, como o ex-jogador de basquete Oscar Schmidt.

Oscar Schmidt é considerado um dos maiores jogadores de basquete de todos os tempos. Ele é o maior pontuador da história contabilizando incríveis 49.737 pontos em sua carreira. Sua maior realização profissional foi no Pan de 1987, quando conquistou o ouro derrotando o poderoso time norte-americano. Muitos jornalistas e locutores esportivos, como o famoso, o “maior”, o “sábio”, o “poliglota”, o “físico”, o “místico” e o “mito”, Galvão Bueno, o chamavam de “Mão Santa” devido à sua precisão nos arremessos e pela quantidade de pontos que fazia em uma partida. Sem dúvida, Oscar era literalmente um gigante em quadra, mas isso era o resultado de treinos exaustivos; de muita dedicação: depois de cada treino, ele fazia 1000 arremessos e foi assim durante toda sua carreira. Por isso, ele se dizia, de forma muito pertinente, um “Mão Treinada”.

oscar-schmidt-4

Figura 1 – O “Mão Santa”

Determinação exige vontade e coragem. Sendo assim, se você quer fazer alguma coisa, corra atrás e faça. Não desista quando vierem os primeiros obstáculos e não dê atenção às pessoas que se aproximam de você depois de algumas pequenas conquistas para tentar utilizá-lo como trampolim para alcançar as próprias ambições. A hipocrisia é mais uma característica daquele mesmo invejoso que não quer o seu bem: sempre que aparecer uma oportunidade, ele fará insinuações maliciosas e agirá de forma a te impedir de seguir adiante em seu caminho de conquistas para que você se sinta tão infeliz quanto ele, pois a felicidade dele é condicionada às suas derrotas.

A hipocrisia é uma homenagem que o vício presta à virtude. François de La Rochefoucauld

pv-inveja

Figura 2 – O Hipócrita Invejoso

Categorias:Atitude