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 =)