REST ou Representational State Transfer surgiu em uma tese de doutorado escrita por Roy Fielding, diferente do padrão SOAP onde a comunicação ocorre por meio de um arquivo XML(mensagens) denominado WSDL, REST tira o máximo de proveito possível do protocolo HTTP com suas possíveis ações GET, POST, PUT e DELETE e conta ainda com o conceito de recursos para “manipular” os dados do Web Service.
Para este post será utilizado o Resteasy e o servidor de aplicação Jboss. Resteasy é um projeto mantido pela Jboss e é a implementação da especificação JAX-RS. O servidor de aplicação da Jboss contém o Resteasy embutido, logo faça apenas o download dele. Abaixo está o código de uma classe que será utilizado como entidade no exemplo:
@XmlRootElement public class Pessoa { private Long id; private String nome; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }
Repare na anotação @XmlRootElement, ela garante que esta entidade será serializada no formato XML com todos os seus atributos.
Agora veja o código da classe que manipula a entidade Pessoa:
@Path("/pessoa/") public class PessoaResource { @Get @Path("/{id}/") @Produces( { MediaType.APPLICATION_XML }) public Pessoa getPessoa(@PathParam("id") Long id) { Pessoa pessoa = new Pessoa(); pessoa.setId(id); pessoa.setNome("Nome " + id); return pessoa; } }
Na classe PessoaResource existem duas anotações @Path, ao acessar esse recurso os dois Path serão concatenados, ou seja, será possivel acessá-lo da seguinte forma “http://localhost/pessoa/1”, onde “1” substitui o parâmetro “{id}”.
A anotação @PathParam(“id”) recupera o parâmetro declarado na anotação @Path(“/{id}/”) que será informado na URL, o @GET configura o método para que seja invocado quanto a “action” do HTTP for “GET”.
A anotação @Produces( { MediaType.APPLICATION_XML }) trabalha em conjunto com a @XmlRootElement da nossa entidade Pessoa, aqui é importante destacar que a anotação @XmlRootElement serializa o objeto enquanto que a @Produces( { MediaType.APPLICATION_XML }) avisa que este recurso produzirá um retorno do tipo XML.
Salve as alterações, faça o deploy no servidor e acesse o seu Web Service por meio da URL: http://localhost:8080/pessoa/1 e você visualizará um arquivo XML com os atributos da entidade Pessoa definidos no método getPessoa.
Pronto agora você tem um Web Service REST =)