Tags:

Como funciona um WebService REST

A web é amplamente utilizada e reconhecida principalmente por sua arquitetura robusta, escalável e tolerante a falhas. Quem sustenta esses fatores e lhe dá todo este poder é o protocolo HTTP (o protocolo HTTP é utilizado, em regra, quando se deseja evitar que a informação transmitida entre o cliente e o servidor seja visualizada por terceiros, como, por exemplo, no caso de compras online.). Atualmente, muitas vezes necessitamos integrar aplicações em ambientes totalmente diferentes e os WebServices são uma das maneiras mais comuns e fáceis de integrar os diferentes sistemas. Este post mostrará um pouco de um modelo de WebService chamado REST.

Representational State Transfer ou somente REST, é cada vez mais usado como alternativa ao “já antigo” SOAP onde que a principal crítica a este é a burocracia, algo que REST possui em uma escala muito menor.
REST é baseado no design do protocolo HTTP, que já possui diversos mecanismos embutidos para representar recursos como código de status, representação de tipos de conteúdo, cabeçalhos, etc.

O principal nesta arquitetura são as URLs do sistema e os resources (resource é um recurso, entidade). Ele aproveita os métodos HTTP para se comunicar, que são:

  • GET: Solicita a representação de um determinado recurso. É definido como um método seguro e não deve ser usado para disparar uma ação (remover um usuário, por exemplo);
  • POST: As informações enviadas no corpo (body) da requisição são utilizadas para criar um novo recurso. Também é responsável por fazer processamentos que não são diretamente relacionados a um recurso.
  • DELETE: Remove um recurso. Deve retornar o status 204 caso não exista nenhum recurso para a URI especificada.
  • PUT: Atualiza um recurso na URI especificada. Caso o recurso não exista, ele pode criar um. A principal diferença entre POST e PUT é que o primeiro pode lidar não somente com recursos, mas também pode fazer processamento de informações.

Porém não existe um padrão obrigatório, pode ser implementado somente o que é necessário em seu contexto.

O exemplo a seguir utiliza a especificação JSR-311 JAX-RS que faz parte do Java EE 6,  para buscar os dados de um cliente:

Lado Servidor

[php]

public class Cliente {
private String nome;
private String endereco;
private int idade;
private char sexo;

// Getters e Setters
}

[/php]

Esta é uma classe Cliente que guarda o nome, endereço, idade e sexo dos clientes.

[php]

@Path(“/cliente/{nome}”)
public class ClienteResource{
@GET
@Produces({MediaType.APPLICATION_JSON})
public Cliente getClienteByNome(@PathParam(“nome”) String nome) {
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = clienteDAO.getClienteByNome(nome);
return cliente;
}
}

[/php]

A anotação @Path(“/cliente/{nome}”) nos fornece uma URL para acesso ao recurso onde o próprio JAX-RS reconhece {nome} como um parâmetro que é enviado através da URL.
Este exemplo implementa somente o serviço GET, como pode ser notado pela anotação @GET no método getClienteByNome que recebe como parâmetro na URL o nome do cliente pela anotação @PathParam(“nome”). A anotação @Produces({MediaType.APPLICATION_JSON}) mostra que esta solicitação GET irá produzir uma resposta no formato JSON.

Supondo que o serviço esteja disponível no endereço http://www.matera.com/exemplo/cliente/ , para conseguirmos os dados da cliente Maria devemos acessar http://www.matera.com/exemplo/cliente/Maria através do browser e receberíamos algo parecido com isto :

[php]{"nome":"Maria","endereco":"Rua Exemplo","idade":"20","sexo":"F"}[/php]

Lado Cliente

[php]

public class ClienteRestClient{
public static void main (String[] args) throws Exception {
HttpClient httpClient = new HttpClient();
GetMethod httpMethod = new GetMethod(“http://www.matera.com/exemplo/cliente/Maria”);
httpMethod.addRequestHeader(“Accept”, “application/json”);
httpClient.executeMethod(httpMethod);
Scanner scan = new Scanner(httpMethod.getResponseBodyAsStream());
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
httpMethod.releaseConnection();
}
}
[/php]

Este é um cliente bem simples, em que o retorno não é nada mais do que o que o browser já nos apresentava, mas nada impede de se criar um parser JSON para desserializar este objeto, entre outras ações que também ainda podem ser implementadas.

Lembrando que este foi um rápido exemplo com o intuito de mostrar a importância e a facilidade de utilizar REST, foi utilizado JAX-RS, mas existem vários frameworks que podem ser utilizados como o Spring e o VRaptor.

Leia Mais:

http://en.wikipedia.org/wiki/Java_API_for_RESTful_Web_Services
http://www.oracle.com/technetwork/articles/javase/index-137171.html
http://jcp.org/en/jsr/detail?id=311
http://pt.wikipedia.org/wiki/REST
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
http://en.wikipedia.org/wiki/Representational_State_Transfer
http://www.w3schools.com/json/default.asp
http://www.springsource.org/
http://blog.springsource.org/2009/03/08/rest-in-spring-3-mvc/

Por MARCOS PALIARI

Postado em: 22 de outubro de 2012

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário