Representando atualmente a opção mais popular para a implementação de serviços, o modelo arquitetural conhecido como REST (abreviação do inglês “Representational State Transfer”) é uma presença quase certa em muitos soluções de e-commerce, mecanismos de integração em tempo real e aplicações mobile. Esta abordagem foi proposta por Roy Fielding ainda no início dos anos 2000, tendo como pilares o uso de requisições HTTP e o conceito de recurso.
A ideia de recurso diz respeito a um elemento (conjunto de dados) do qual uma aplicação depende, normalmente correspondendo a um item específico de uma área de negócios. Tomando como exemplo uma aplicação de vendas online, aspectos como produtos, clientes e pedidos constituem alguns dos recursos que estariam sendo manipulados.
Plataformas de desenvolvimento como .NET, Java, Node.js e Ruby são bons exemplos de alternativas com excelente suporte ao modelo REST. No caso específico do .NET Framework, tecnologias como ASP.NET Web API e WCF (Windows Communication Foundation) são as opções disponíveis para a construção de serviços que seguem esta arquitetura (estes últimos também recebem o nome “RESTful Web Services”).
Na Imagem 1 é possível observar uma representação esquemática do modelo REST.
Imagem 1: Representação esquemática do modelo REST
Alguns princípios devem ser considerados, a fim de viabilizar a construção de serviços em conformidade com esta abordagem:
- O uso de métodos HTTP de forma explícita;
- A exposição de recursos por meio de URIs;
- A representação de recursos empregando formatos como XML e JSON;
- A independência de estado.
Uso de métodos HTTP de forma explícita
A comunicação com um serviço baseado em REST acontece por meio de requisições HTTP, com o uso dos verbos listados a seguir representando uma convenção geral para a manipulação de serviços:
- POST: criação de um novo recurso;
- GET: consulta para obtenção de um ou mais recursos;
- PUT: alteração do conteúdo ou estado de um recurso;
- DELETE: remoção/exclusão de um recurso.
Exposição de recursos por meio de URIs
O acesso aos recursos disponibilizados por um serviço se dá através de endereços únicos conhecidos como URIs (sigla do inglês “Uniform Resource Identifier”).
Considerando especificamente as solicitações HTTP, URLs (abreviação do termo “Uniform Resource Locator”) correspondem aos endereços que servirão de base para a interação com um serviço. Um exemplo disto pode ser visualizado na Imagem 2.
Imagem 2: Endereço único para um recurso
Representação de recursos empregando formatos como XML e JSON
O processo de transferência de dados dentro modelo REST pode utilizar os formatos JSON ou XML, padrões estes que contribuem para um menor volume de informações trafegadas (Imagem 3).
Imagem 3: Exemplos de uso dos formatos XML e JSON em REST
Independência de estado
Requisitos como performance e escalabilidade (capacidade de se adequar a demandas crescentes) são preocupações centrais em projetos críticos que façam uso de serviços. O modelo REST enfatiza a necessidade de que tais componentes sejam implementados sem depender de informações de estado (característica esta conhecida como “stateless”), minimizando assim o uso de memória que seria requerido em tais casos (como em situações que exigissem o uso de sessões).
Conclusão
A ideia com este artigo foi apresentar uma visão geral do modelo REST, discutindo algumas características e conceitos fundamentais dentro desta abordagem. O próprio ASP.NET Web API foi projetado tomando como base os diversos princípios aqui expostos, correspondendo atualmente à principal alternativa para a implementação de serviços em .NET.
Espero que este conteúdo possa ter sido útil.
Até uma próxima oportunidade!
Referências
Architectural Styles and the Design of Network-based Software Architectures
https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
ASP.NET Web API
http://www.asp.net/web-api
RESTful Web services: The basics
http://www.ibm.com/developerworks/library/ws-restful/
WCF x Web API: comparando as tecnologias .NET para implementação de serviços
http://netcoders.com.br/wcf-web-api-estudo-comparativo/