REST, JAX-RS, RESTeasy e integração

É cada vez maior o interesse e a necessidade em integração de sistemas, as aplicações raramente permanecem isoladas, pois usuários querem acessar todas as informações e funcionalidades de uma empresa independente de qual sistema os dados ou funcionalidades estejam. Ao longo do tempo, muito esforço foi despendido em diversas técnicas, padrões e arquiteturas foram criadas e especificadas para facilitar a troca de dados entre computadores e aplicações diferentes. Várias formas de integração surgiram ao longo do tempo, uma das mais antigas é a transferência de arquivos (file transfer), onde os sistemas trocam arquivos entre si, há também troca de mensagens (messaging), banco de dados compartilhado (shared database), entre outras.

O problema dessas formas de integração são a complexidade e questões como escalabilidade e forte acoplamento dependendo da abordagem de integração utilizada. REST aparece como uma alternativa mais simples e eficaz para integração de sistemas. Roy Fielding, um dos principais autores da especificação HTTP, em sua tese de doutorado sobre REST, afirma que REST “enfatiza a escalabilidade das interações do componente, a generalidade das interfaces, a implementação independente de componentes e componentes intermediários para reduzir a latência da interação, forçar a segurança e encapsular sistemas legados”. Não é difícil a construção de sistemas RESTful (termo usado para descrever sistemas ou componentes de software que atendam aos princípios REST) altamente escaláveis e fracamente acoplados.

Arquitetar soluções Java que implementem os princípios REST é simples por meio da especificação JAX-RS, que fornece uma API Java para Web Services RESTful.

REST e JAX-RS

REST (Representational State Transfer) fornece uma abordagem para a troca de informações entre aplicações diferentes ou partes distribuídas de uma mesma aplicação tirando proveito das características do protocolo HTTP. REST considera dados e funcionalidades como recursos, estes recursos são acessados por URIs (Uniform Resource Identifiers) que geralmente são links da web. Em uma arquitetura REST os recursos são manipulados por meio de operações bem definidas e independentes de estado (stateless), são as operações do protocolo HTTP.

Seguem os princípios de REST:

  • Identificação de recurso por meio de URI: Recursos são identificados por meio de URIs que fornecem um espaço de endereçamento global. Exemplo de URI: http://www.loja.com/produto/452, pode-se alterar o código do produto e obter a descrição de outro produto. http://www.loja.com/produto/468/comprar, pode-ser realizar uma operação sobre o produto.
  • Interface uniforme: Recursos são manipulados por uma série de operações padrões para criar, ler, atualizar e apagar: PUT, GET, POST e DELETE. Essas são as operações do protocolo HTTP. PUT cria um novo recurso, GET obtém o estado atual de um recurso, POST envia um novo estado para o recurso e DELETE apaga o recurso. 
  • Mensagens auto descritivas: O conteúdo dos recursos pode ser acessado em uma grande variedade de formatos, como HTML, XML, texto, PDF, JPEG, JSON, entre outros. Metadados sobre os recursos são fornecidos e são usados para diversas tarefas como controle de cache, detecção de transmissão de erros, controle de acesso, etc. 
  • Interações independentes de estado por meio de links: Toda interação com um recurso é independente de estado, por isso REST utiliza as operações do protocolo HTTP, que é um protoco stateless.

JAX-RS é uma especificação de uma API Java para Web Services RESTful utilizando a arquitetura REST. Há várias implementações JAX-RS, entre elas Jersey, Apache CXF, Restlet e RESTeasy.

RESTeasy

RESTeasy é uma implementação da JBoss da especificação JAX-RS e fornece vários frameworks para a construção de Web Services e aplicações Java de modo RESTful. O RESTeasy pode rodar em qualquer servlet container. Há diversas maneiras para instalar e configurar o RESTeasy em seu ambiente, entretanto, se estiver utilizando o JBoss AS 6 ou superior, o RESTeasy já estará integrado e haverá pouco esforço em sua instalação e configuração. Caso esteja utilizando outro ambiente, há algumas etapas manuais para a instalação do RESTeasy, a documentação do RESTeasy, disponível em http://www.jboss.org/resteasy/docs, é bastante completa e cobre a instalação e configuração em vários ambientes.

Algumas características do RESTeasy incluem:

  • Implementação certificada da especificação JAX-RS.
  • Portável para qualquer servidor de aplicação que execute sobre a JDK 6 ou superior.
  • Framework cliente que utiliza anotações JAX-RS para suporte ao desenvolvimento de clientes HTTP.
  • Uma variedade de formatos: XML, JSON, YAML, Fastinfoset, Multipart, XOP, Atom, etc.

O RESTeasy é implementado como um Servlet e implantado em um arquivo WAR. Seu uso é bastante simples e existem muitos “hello world” em vários ambientes. Há muitas outras características do RESTeasy, a lista completa pode ser conferida no site oficial do RESTeasy.

Outras implementações

Há várias outras implementações da especificação JAX-RS, entre elas Jersey, Apache CXF e Restlet. Cabe ao desenvolvedor analisar os diferenciais e recursos que cada uma das implementações oferece, a fim de escolher a melhor alternativa para o seu projeto. O RESTeasy foi a implementação mais abordada, mas apenas como exemplo para se ter uma ideia dos detalhes de uma implementação da especificação JAX-RS, não que ele seja a melhor opção. A implementação Jersey, inclusive, é a implementação de referência do JAX-RS. Há vários fatores a serem levados em consideração a fim de escolher uma implementação JAX-RS para desenvolver aplicações REST em Java, os principais são curva de aprendizado, documentação e suporte. Vale a pena analisar as principais implementações com mais cuidado antes da escolha final.

Referências interessantes

The Java EE 6 Tutorial – Building RESTful Web Services with JAX-RS. Disponível em: http://docs.oracle.com/javaee/6/tutorial/doc/giepu.html. Acesso em 23 mai. 2013.

Arquitetura REST com Java: JAX-RS. Disponível em: http://blog.caelum.com.br/arquitetura-rest-com-java-jax-rs/. Acesso em 23 mai. 2013.

Uma rápida introdução ao REST. http://www.infoq.com/br/articles/rest-introduction. Acesso em 23 mai. 2013.

Site oficial do projeto RESTeasy: http://www.jboss.org/resteasy.

Site oficial do projeto Jersey: https://jersey.java.net/.

Site oficial do projeto Apache CXF:  http://cxf.apache.org/.

Site oficial do projeto Restlet: http://restlet.org/.

Site sobre padrões de integração em sistemas corporativos: http://www.eaipatterns.com/eaipatterns.html.

1 Reply to “REST, JAX-RS, RESTeasy e integração”