Desenvolvendo Web Services RESTFUL utilizando a API JAX-RS 2.0 e Jersey
Veja neste artigo os conceitos fundamentais de WebService RESTFUL e como desenvolvê-los utilizando a API JAX-RS: Java API for RESTful Web Services.
O que é WebService?
WebServices São serviços/métodos que as aplicações disponibilizam para serem consumidos/executados por outras aplicações. Envolvem um produtor e um consumidor e são disponibilizados via Internet. São aplicações que, geralmente, rodam em cima do protocolo HTTP. WebServices são sistemas distribuídas e seus componentes podem ser executados em dispositivos diversos tais como: desktops, smartphones e tablets.
Por que utilizar WebServices? O que há de bom neles?
Os WebServices são implantados usando um padrão de indústria e protocolos independentes como HTTP e XML/JSON Eles podem prover a interoperabilidade entre os serviços e reduzir o custo de entrada, já que podem aproveitar outras infraestruturas já em vigor, como a segurança, redes, formatação de dados, etc.
Os provedores de serviços e seus clientes podem interoperar mesmo que escritos em diferentes linguagens de programação. As linguagens de programação mais conhecidas e utilizadas pela Indústria de software dão suporte à WebServices, a citar: PHP, Python, Java, etc... Isso é maravilhoso! Com isso, podemos desenvolver sistemas e disponibilizar funcionalidades destes para serem reaproveitados por outras aplicações sem impor a elas a utilização da mesma plataforma em que o serviço foi desenvolvido, pois o próprio sistema JAX-RS é quem se responsabiliza pela integração. Ele é reaproveitável!
Além de tudo, os WebServices tem design modular, onde novos serviços podem ser gerados através da integração e sobreposição de serviços existentes.
Existem WebServices com estilo REST e WebServices baseados em SOAP (caso especial do estilo REST).
Como vamos focar em RESTFUL, então serão abordados conceitos de RESTFUL.
O REST surgiu em uma tese de PHD de Roy Fielding (Cofundador da Apache Software Fundation e um dos principais autores da especificação HTTP). Enquanto SOAP é um protocolo de mensagens, RESTful é um estilo de arquitetura de software para sistemas distribuídos com hipermídia (texto, gráficos, áudio, etc. que são armazenados em uma rede e interligados por hiperlinks).
Um recurso possui hiperlinks e estes utilizam URIs (Uniform Resource Identifier), que são identificadores únicos para recursos na Internet, para fazer a ligação. Um cliente RESTful emite uma solicitação que envolve um recurso, se a solicitação for bem-sucedida, uma representação do recurso (podendo ser o texto/html) é transferida do servidor que hospeda o recurso para o cliente que fez a solicitação.
Os WebServices RESTful exigem não só recursos, mas precisam de operações que representem o pedido dos clientes. No RESTful, são conhecidos como verbos os métodos do protocolo HTTP: POST (cria um novo recurso); GET (lê um recurso); PUT(atualiza um recurso); DELETE (deleta um recurso); HEAD (recupera o header da URI passada); OPTIONS (recupera os métodos que são possíveis); TRACE (recupera informações de debug).
O URI representa o recurso e assim deve ser colocado no substantivo (como já é conhecido o recurso em REST). Por exemplo, em uma rede de lojas se quisermos ter acesso a dados de uma determinada loja (GET), a URI seria: “/lojas/id”, ou para listar todas as lojas(recursos) criadas: “/lojas”. Com o POST poderíamos utilizar a mesma URI “/lojas”, sendo que utilizando com o POST a intenção é criar um novo recurso loja. Utilizando a URI “/lojas/id” com o verbo DELETE a operação seria de remover determinada loja.
Você pode definir nas classes quais verbos são convenientes à utilização, por exemplo, se é requisito que nenhuma loja seja excluída, então não se implementa o método DELETE.
Entendido um pouco de REST, vamos ao ponto de partida: HelloWorld
Java dá suporte a REST através da JSR 339 (Java Specification Resquest), esta especificação é chamada de JAX-RS 2.0. Jersey é a implementação da especificação para JAX-RS. Basicamente, Jersey tem um servidor e um cliente REST. O “core-client” pode ser usado fornecendo uma biblioteca para se comunicar com o servidor. No lado do servidor, o Jersey usa um servlet que “escaneia” as classes predefinidas para identificar os recursos REST. ATENÇÃO: através do arquivo de configuração “web.xml” é que se registra o servlet, que não precisa ser criado, ele já é fornecido pela Jersey distribution (encontra-se nas bibliotecas).
Iniciando o projeto, crie um novo projeto no eclipse -> Dynamic Web Project, dar nome ao projeto e escolher o servidor (Apache Tomcat), como na Figura 1:
Figura 1: Criando novo projeto web e definindo algumas opções
Antes de criar, a classe Resource é importante baixar e adicionar nas libs do projeto (WebContent/WEB-INF/lib) os jars do Jersey. Os jars necessários são: asm-3.1.jar, Jersey-core-1.4.jar, Jersey-server-1.4.jar, jsr311-api-1.1.1.jar. Estes estão presentes em um arquivo .zip disponível para download no site do Jersey (link direto: http://maven.java.net/service/local/artifact/maven/redirect?r=releases&g=com.sun.jersey&a=jersey-archive&v=1.17&e=zip. Os jars aparecem circulados na Figura 2:
Figura 2: JARs adicionados na pasta lib
Criando a classe RESOURCE:
Listagem 1: RECURSO que irá ser utilizado
package luana.article.validator.devmedia.resource;
import javax.WebServices.rs.GET; //import da biblioteca jersey
import javax.WebServices.rs.Path; //import da biblioteca jersey
import javax.WebServices.rs.Produces; //import da biblioteca jersey
@Path("/helloworld") // o @path define a URI do recurso que nesse caso será /helloworld
public class RecursoHelloWorld {
@GET // utilizando apenas o verbo GET, ou seja, vou apenas ler o recurso
@Produces("text/plain") // define qual tipo MIME é retornado para o cliente
public String exibir(){
return "Hello World";
}
}
Feito o Resource, basta agora mapear o servlet e o recurso no web.xml:
Agora, é só colocar para a aplicação rodar no servidor. E pronto coloque a seguinte URL (com as modificações necessárias porta, nome escolhido para o projeto e para o recurso): http://localhost:5550/TesteWebServices/helloworld se tudo correr bem irá aparecer um Hello World na tela.
Com isto finalizo o artigo, por hoje é só... Espero que tenham gostado.
Um abraço.
DAS CONSIDERAÇÕES FINAIS
Vê-se que o RESTful não é um bicho de sete cabeças e é muito simples ser implementado. Para aplicações mais complexas é necessário cautela para escolher os serviços de cada recurso. A base foi dada! Mãos a obra com os próximos WebServices!
Links Úteis
Saiba mais sobre Java ;)
- Curso básico de Java Aplicado:
O objetivo do curso de Java Básico aplicado é apresentar os conceitos básicos da linguagem de programação Java, assim como da Orientação a Objetos, aplicados em exemplos simples e úteis, utilizados pela maioria dos desenvolvedores no dia a dia do desenvolvimento de software. - Básico de Java e Orientação a Objetos:
O objetivo deste curso básico de Java e Orientação a Objetos é apresentar os conceitos básicos da linguagem de programação Java e a orientação a objetos (OO), visando ensinar usuários leigos, com pouca experiência em linguagem de programação a trabalhar com a plataforma Java. - Curso de Java: Técnicas Avançadas para Java SE:
Neste curso de Java avançado iremos nos aprofundar em tópicos de programação que ajudam você a entender os conceitos mais avançados de Java. Isso significa que o programador já precisa ter conhecimentos prévios da linguagem Java, bem como dos seus recursos, lógica de programação, depuração de código, IDEs, dentre outros conceitos básicos de programação.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo