REpresentation State Transfer (REST)

Atenção
O conteúdo desta página foi criado em sua totalidade praticamente em cima deste artigo: Web Services REST.

Características

 * Estilo de arquitetura de software para sistemas distribuídos;
 * Termo proposto por Roy Fielding em sua tese de doutorado;
 * Web services com a arquitetura da internet;
 * Exploração extensa dos recursos do HTTP (diferente de SOAP que é independente do protocolo de transporte);
 * Estilo de invocação declarativo, por exemplo, "/usuario/123456";

Por que implementar serviços REST?

 * Protocolos menos complexos;
 * Mais poder e flexibilidade nas comunicações;
 * Arquitetura amplamente disponível nas empresas;
 * Menos overhead de protocolo;

Quando NÃO implementar serviços REST?

 * Integrações com produtos fechados WS-*;
 * Quando WS-Transaction fizer sentido;
 * Quando WS-Security fizer sentido;
 * Quando não houver API HTTP razoável no servidor e/ou clientes-alvo;

REST em Java/J2EE
Exemplo: @Path("/pedido/{id}") public class PedidoResource {
 * Especificada na JSR 311;
 * JAX-RS foca em URI's e no protocolo HTTP;

@GET @Produces( { MediaType.APPLICATION_XML }) public Pedido getPedidoById(@PathParam("id") Long id) { PedidoDAO pedidoDAO = new PedidoDAO; Pedido pedido = pedidoDAO.getPedidoById(id); return pedido; } }

Acessando: "http://umsitefeitoemREST.com.br/rest/pedido/10", teríamos o seguinte resultado: 2009-12-10T18:50:57.173-02:00 Pedido 10 10 3000.25

Referências

 * http://brunopereira.org/webservicesrest-indice/;
 * http://javafree.uol.com.br/artigo/871485/;
 * http://en.wikipedia.org/wiki/SOAP;
 * http://ws.apache.org/axis/java/user-guide.html;
 * http://blog.caelum.com.br/arquitetura-rest-com-java-jax-rs/;
 * http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html;
 * http://www.devmedia.com.br/articles/viewcomp.asp?comp=15150;