Tuesday, July 24, 2012

Criar e consumir Serviços REST com WCF


O que é  REST?




Representational State Transfer ou somente (REST) é uma técnica de engenharia de software para sistemas  distribuídos como a World Wide Web. O termo se originou no ano de 2000, em uma tese de doutorado escrita por Roy Fielding, um dos principais autores do protocolo HTTP.

Este conceito foi muito bem aceito e se espalhou mundialmente como uma alternativa mais simples que o protocolo SOAP e serviços baseados em WSDL. Uma evidência disso é o fato de empresas populares como o Google, Yahoo e Facebook terem adotado o REST para suas interfaces e serviços.


Antes de entender o REST, precisamos rever a essência da plataforma web. Ela é chamada assim pois a sua arquitetura disponibiliza um framework para criar e navegar através de uma rede de recursos. Um recurso pode ser qualquer coisa, um arquivo de imagem, vídeo, html ou um serviço que produza um output dinamicamente. A web possui uma arquitetura orientada a recursos.

Na web, cada recurso recebe um identificador unico, chamado URI (universal resource identifier). O tipo de URI mais comum usado na web é o URL (Uniform resource locator).
Já que um URI identifica um recurso, ele pode ser salvo para uso no futuro e para compartilhamento com outras pessoas. Por exemplo, posso enviar o URL de um site que eu gostei para meus amigos acessarem.
Agora o grande motivo para o nome WEB é o fato dos recursos conterem hyperlinks para outros recursos, criando desta maneira uma rede infinita de recursos interligados.

Quando você usa o browser para abrir um recurso da Web na verdade você está abrindo apenas uma representação daquele recurso. Ou seja, podem existir mais de uma representação para um determinado recurso. Existem muitos formatos usados na Web hoje em dia para representar recursos de uma maneira que todos os browsers sejam capazes de interpretar, entre eles podemos citar: (X)HTML, JPEG, GIF, WMV , SWF , RSS, CSS, JSON, JavaScript. Quando o browser receve uma destas representações ele a interpreta e renderiza o recurso em tela.

Conceitos Fundamentais do protocolo HTTP

O protocolo standard para web é o HTTP. Ele define um grupo padrão de métodos, status codes e cabeçalhos para permitir a interação com os recursos e as suas representações. A figura abaixo lista os métodos mais comuns




A imagem abaixo mostra os status codes do protocolo HTTP



O grande diferencial do REST é a sua enfase em uma interface uniforme entre os componentes. Sua teoria prega que generalizar e padronizar a interface dos componentes simplifica a arquitetura geral do sistema e permite mais visibilidade para as interações.
O REST define como usar essa interface uniforme através de restrições adicionais e como identificar cada um dos recursos e manipula-los através de suas representações.


Princípios do REST

Usar métodos HTTP explicitamente.
Não armazenar estado (Stateless).
Expor URIs com estrutura de diretórios.
Transferência XML, JavaScript Object Notation (JSON), ou ambos.

Como funciona?

Os serviços RESTful expoem recursos que  associados através de URIs, cujas chamadas são realizadas através de verbos HTTP.
O verbo utilizado na requisição indica para o serviço que ação deve ser realizada com o recurso, os verbos mais comuns para serem utilizados com o REST são GET, POST, PUT e DELETE



REST VS SOAP (COMPARATIVO)



Cenário Prático:

Vamos desenvolver um serviço REST para fazer o CRUD de administradores do sitema.

Passo 1 - Crie uma nova solution so seu projeto, crie uma camada Class Library para manipulação da persistência de dados (DataAccessLayer) e uma camada para definição dos modelos de objeto do dominio (DomainModelLayer).

Passo 2 - Clique na Solution e selecione Add new Project, Selecione Online Templates e faça uma pesquisa por "WCF".

Passo 3 - Selecione o projeto conforme exibido na figura abaixo e nomeie como WcfRestServicesLayer



Passo 4 - Crie um objeto no seu domínio, no nosso caso criamos a Entidade Administrador. Atenção para os marcadores [DataContract], [Serializable] e [DataMember]




Passo 5 - Agora vamos definir o contrato do nosso serviço . Na camada WcfRestServicesLayer, crie uma Interface IAdministradores com o código abaixo. Essa interface define quais métodos estarão disponpiveis no serviço e qual a URI e parâmetros necessários para cada método.




Passo 6 - Criar a classe que implementa a interface do serviço e realiza as operações de fato. Na mesma camada, crie uma classe Administradores com o código abaixo;



Lembre-se que cada um dos métodos definidos na interface IAdminstradores deve ser implementado.

Passo 7 - Registrando o serviço na aplicação. Na camada WcfRestServicesLayer,  abra o web.config e adicione o seguinte código:




Agora abra o arquivo Global.asax e adicione o código:




Consumindo o serviço.

Na sua aplicação WEB que irá consumir o serviço, adicione o seguinte código para implementar o padrão Abstract Factory para instanciar o serviço.



Agora para consumir, basta pedir a factory que forneça o serviço, por exemplo:








No comments:

Post a Comment