[Atualizado em 2008-10-18.]

Já ouviu falar em REST?

É o acrônimo para o termo em inglês Representational State Transfer, ou Transferência de Estado Representacional. O termo foi introduzido por Roy Thomas Fielding — um dos principais autores da especificação HTTP e autoridade em arquitetura de redes de computadores — no ano de 2000, em sua tese de doutorado (Ph.D.): Architectural Styles and the Design of Network-based Software Architectures, Universidade da Califórnia, Irvine, EUA. O capítulo 5 da tese versa sobre Representational State Transfer (REST).

De 2000 até agora, o conceito vem se difundido e se popularizando como um estilo de arquitetura de software moderno para sistemas hipermídia distribuídos, em especial as aplicações na World Wide Web (WWW, ou simplesmente web “para os íntimos”).

O conceito de REST e os sistemas RESTful (aderentes aos princípios de REST) refletem, em minha opinião, uma das muitas facetas do aumento da abstração e complexidade na arquitetura das aplicações via Internet.

Desde que a web surgiu no início da década de 1990 — criada por Tim Berners-Lee no CERN — até hoje, acompanhamos seu aumento de abrangência e complexidade. Surgiu como um meio simples e prático de disponibilização de conteúdo hipermídia na Internet.

Ao longo dos anos, por um lado o conteúdo da web se tornou mais rico e multimídia com a introdução de imagem, animações, áudio e vídeo etc. Por outro, sua interatividade cresce em ritmo acelerado, tornando a web um canal de interação, aplicações e serviços cada vez mais amplo.

As aplicações na web também deram os primeiros passos com o protocolo Common Gateway Interface (CGI) até chegarem à era atual dos Web Services (WS), da Arquitetura Orientada a Serviços (Service-Oriented Architecture – SOA) e seu uso nos sistemas de Gerenciamento de Processos de Negócio (Business Process Management – BPM).

Assim, a web deixa de ser a camada de mais alto nível de abstração na pilha das aplicações Internet (WWW → HTTP → TCP/IP). Acima dela se posicionam sistemas complexos que tem a web como “mera” base de infraestrutura. Neste topo entram princípios e mecanismos como REST, WS, SOA e AJAX, bem como os frameworks de aplicação web de alto nível — baseados em componentes — como Java EE (JSF → JSP → Servlets), Microsoft .NET Framework e o Zend Framework do PHP 5.

Isso me traz à mente a comparação com o que li tempos atrás. A constatação — que então me impressionou — de que os mecanismos de Mapeamento Objeto-Relacional e frameworks de persistência como o Hibernate estavam fazendo a linguagem SQL se tornar commodity, vista como uma camada de “baixo nível” na interação com bancos de dados. Concordo. Eis aí mais um exemplo do aumento no nível de abstração e complexidade dos sistemas.

Para saber mais:

REST em Java

Para intergrar a futura plataforma Java EE 6, em fevereiro de 2007 foi proposta a nova especificação JSR 311 – JAX-RS: The Java API for RESTful Web Services, Java Community Process (JCP). A JSR 311 teve sua versão final lançada em 2008-10-10.

Implementações de Web Services RESTful em Java:

Para saber mais (todos em inglês):