Neste tutorial nA?s falaremos um pouco sobre a teoria dos Web Services RESTFull e como consumir estes serviAi??os no Windows Phone 8, usando o componenteAi??RestSharpWrapper.
O que sA?oAi??Web ServicesAi??RESTFull
Representational State Transfer (REST) Ai?? um estilo arquitetural que especifica constraints, como uma interface uniforme, que quando aplicada a um Web Service, influenciaAi??propriedades desejadas, como performance, escalabilidade e modificabilidade, o que habilita os serviAi??os a trabalhar melhor na Web.No estilo arquitetural REST dados e funcionalidade sA?o considerados recursos e sA?o acessados utilizando Uniform Resource Identifiers (URIs), tipicamente links na Web. Os recursos sA?o ativados usando um conjunto de operaAi??Ai??es simples e bem definidas. Ai??OAi??estilo arquitetural REST restringe uma arquitetura para cliente/servidor e Ai?? desenhado para utilizar comunicaAi??Ai??es stateless, tipicamente HTTP. NoAi??estilo arquitetural REST, clientes e servidores trocam representaAi??Ai??es de recursos utilizando um protocolo de interface padronizado.
Recursos sA?o manupulados utilizando um conjunto fixo(ou quase fixo) de quatro operaAi??Ai??es create, read, update eAi??delete: PUT, GET, POST, Ai??e DELETE. PUT Ai??cria um novo recurso, o qual pode ser deletado por DELETE. GET captura o estado atual de um recurso em alguma representaAi??A?o. POST transfere um recurso a um novo estado.
As classesAi??RestSharpWrapper eAi??HttpRestRequest
As Classes RestSharpWrapper e HttpRestRequest sA?o especializaAi??Ai??es das classes RestSharp e RestRequest que pertencem Ai?? library open source RestSharp. A motivaAi??A?o para escrever esses wrappers foi reduzir a quantidade de cA?digo irrelevante necessA?rio para configurar as chamadas para asAi??RESTFull apis. Acompanhe um overview da solution:
A maior parte do trabalho Ai?? feito na classeAi??HttpRestRequest, Que Ai?? responsA?vel por guardar todos os dados necessA?rios para fazer requests de algum recurso de umaAi??RESTFull api. O mAi??todo PreProcessResponse implementa um tratamento de erros bA?sico que pode facilmente ser sobrescrito por uma aplicaAi??A?o cliente para atender Ai?? condiAi??Ai??es especAi??ficas. Se oAi??request for bem sucedido, oAi??PreProcessResponse encaminha a chamada ao mAi??todo ProcessSuccessRequest, de outra forma Ai?? encaminhado paraAi??ProcessFailedRequest. A aplicaAi??A?o cliente Ai?? responsA?vel por tomar a aAi??A?o apropriada com a resposta retornada.
Quando o recurso Ai?? retornado, ele possui um formato especAi??fico.Ai??Os mais comuns atualmente sA?oAi??os formatosAi??JSON eAi??XML, oAi??DefaultJsonHttpRequest Ai?? uma especializaAi??A?o deAi??HttpRestRequest para tratamento de repostas na representaAi??A?oAi??JSON.
How to
Primeiro, assegure-se que vocA? possui o INdT.Framework Ai??referenciado no seu projeto. No exemplo abaixo, nos usaremos uma api exemplo hospedada nesse blog.
User eAi??UserList Models
using System; using Newtonsoft.Json; namespace RestServicesSample.Model { public class User { [JsonProperty("id")] public String Id { get; set; } [JsonProperty("name")] public String Name { get; set; } [JsonProperty("surname")] public String Surname { get; set; } [JsonProperty("email")] public String Email { get; set; } [JsonProperty("phone")] public String Phone { get; set; } } }
public class UserList { public List<User> user { get; set; } }
Pegar informaAi??A?o de um usuA?rio especAi??fico
public void GetUser(int userId, Action<User> success, Action<String> fail) { String resource = String.Format(Api.UserUri, userId); DefaultJsonHttpRequest<User, string> request = new DefaultJsonHttpRequest<User, string>(resource, Method.GET, success, fail); restClient.ExecuteAsync(request); }
Pegar a lista de todos os usuA?rios
public void GetUsers(Action<UserList> success, Action<String> fail) { DefaultJsonHttpRequest<UserList, string> request = new DefaultJsonHttpRequest<UserList, string>("/user", Method.GET, success, fail); restClient.ExecuteAsync(request); }
O cA?digo fonte para esse e outros A?timos exemplos estA?o disponAi??veis para download noAi??CodePlex