Tags:

Implementando WEB Service Rest e Client Rest utilizando Spring

Já foi mencionado anteriormente em “Como funciona um Web Service REST” sobre o funcionamento e o conceito de web services REST. Neste post apresentaremos uma maneira simplificada de implementar serviços baseados em REST, assim como clientes para consumir esse tipo de web services.

O framework Spring fornece suporte para a criação de aplicações RESTful. Com ele, é possível implementar de forma ágil e rápida web services RESTful utilizando algumas anotações que herdam o comportamento encontrado nas APIs do Spring MVC. O Spring também fornece bibliotecas para o lado do cliente, através de uma API chamada RestTemplate, que fornece implementações que facilitam a montagem das requisições HTTP aos serviços. Esta API se assemelha conceitualmente a outras APIs do Spring, como JdbcTemplate e JmsTemplate.

Para os serviços, os Controllers do Spring MVC devem ser utilizados para receber e manipular as requisições realizadas pelos clientes. Para declarar um serviço é necessário anotar a sua classe com @Controller. As anotações @RequestMapping devem ser utilizadas nos métodos que irão tratar as requisições dos clientes e os atributos value e method são utilizados respectivamente para definir o caminho absoluto do serviço e o seu método HTTP (GET,POST,PUT,DELETE). O DispatcherHandler do Spring irá direcionar as requisições para os métodos anotados com @RequestMapping, com base na URL e no método HTTP utilizado pelo cliente. A anotação @PathVariable deve ser utilizada para obter variáveis da URL, já a anotação @RequestBody é utilizada para obter o conteúdo do corpo da requisição, assim como @ResponseBody é utilizada para associar um valor para o corpo da resposta HTTP. A imagem 1 apresenta dois métodos de um serviço que utilizam as anotações explicadas anteriormente.

ServiceWs
Imagem 1 – Exemplo de utilização da API do Spring para criar um simples web service REST.

Para os clientes, a classe RestTemplate deve ser utilizada para criar as requisições HTTP a serviços REST. Ela fornece métodos que correspondem a 6 métodos HTTP (GET, HEAD, PUT, DELETE, OPTIONS, POST) e  recebem uma String como argumento que representa a URL desejada e em alguns casos o objeto que deve ser enviado ou que se espera receber do serviço. Para isto é necessário utilizar HTTP Message Converters. Os conversores para tipos MIME são disponibilizados por default, mas é possível escrever conversores customizados.  Na imagem 2 é apresentada uma forma de utilizar o RestTemplate para fazer requisições para o serviço apresentado na imagem 1.

ClientWs
Imagem 2 – Exemplo da utilização da api do spring para criar um cliente para um web service rest

A classe MarshallingHttpMessageConverter do Spring é o conversor default para os tipos MIME text/xml e application/xml. Este conversor foi utilizado nos exemplos das imagens para converter um objeto Livro em um arquivo XML que é adicionado ao corpo da requisição do cliente e da resposta do serviço. Para que isto seja possível é necessário mapear a classe Livro com algumas anotações, as quais indicam como o arquivo XML deve dispor as tags. A Imagem 3 apresenta um trecho da classe Livro com as anotações utilizadas para o mapeamento.

Imagem 3 - Trecho da classe Livro utilizando mapeamento para um arquivo xml.
Imagem 3 – Trecho da classe Livro utilizando mapeamento para um arquivo xml.

O Spring fornece um bom suporte para a criação de serviços e clientes REST. De forma simples, elegante e ágil, abstrai uma grande complexidade, facilitando e aumentando a produtividade dos desenvolvedores. Consequentemente, reduz o tempo e custo de projetos que demandem a utilização de web services RESTful.

Referências:

http://www.developer.com/java/web/restful-clients-in-spring.html
http://www.developer.com/java/web/spring-3.0-support-for-restful-web-services.html
http://briansjavablog.blogspot.com.br/2012/08/rest-services-with-spring.html

Por VIDAL FONTOURA

Postado em: 25 de janeiro de 2013

Confira outros artigos do nosso blog

Estimando Custos na AWS

08 de março de 2016

Anderson Lima

Usando Amazon SQS como sistema de mensagens (2/2)

02 de março de 2016

Luis Sergio F. Carneiro

Cine Dojo: a mistura da MATERA de Coding Dojo, Cinema, Pipoca e TI!

04 de fevereiro de 2016

Valmir Massafera Jr

Documentação da sua Nuvem com Linha do Comando

15 de dezembro de 2015

Matias Schweizer

Deixe seu comentário