Acessando serviços RESTful com a biblioteca RestSharp
O modelo conhecido como REST (sigla de “Representational State Transfer”) tem sido cada vez mais utilizado na implementação de serviços em diferentes plataformas, correspondendo a uma das bases empregadas na concepção de tecnologias como o ASP.NET Web API e o Node.js. Levando em conta tal cenário, é inegável que em algum momento desenvolvedores .NET precisem consumir dados disponibilizados por aplicações deste tipo.
Uma solução simples e que pode atender de forma satisfatória a este tipo de demanda é a biblioteca RestSharp, um projeto open source que disponibiliza diversos recursos com vistas a facilitar a interação com serviços RESTful. Este artigo tem por objetivo demonstrar o uso deste package, a partir de um exemplo prático que será detalhado nas próximas seções.
Consumindo um serviço Web API via RestSharp
Para o exemplo aqui descrito será utilizado o serviço Web API (um catálogo de produtos) implementado no post:
Será modificada também uma aplicação (TesteConsumoWebAPI) implementada em outro artigo indicado a seguir, a fim de possibilitar o consumo e exibição de dados do catálogo em questão:
Além dos projetos mencionados, serão utilizados ainda os seguintes recursos:
- O Microsoft Visual Studio Community 2015 como IDE de desenvolvimento;
- O .NET Framework 4.6 e o Microsoft ASP.NET MVC 5 (o projeto TesteConsumoWebAPI foi criado a partir destes frameworks);
- A versão 105.2.3.0 do package RestSharp.
Antes de adicionar a biblioteca RestSharp à aplicação TesteConsumoWebAPI, será preciso configurar o utilitário NuGet para que o mesmo também utilize como fonte para pesquisa de packages o seguinte endereço:
Acessar para isto o menu Tools > NuGet Package Manager > Package Manager Settings (Imagem 1).
Imagem 1: Configurando o uso do NuGet
Na janela “Options” especificar o caminho indicado anteriormente para a pesquisa de packages do NuGet (Imagem 2):
Imagem 2: Adicionando uma outra fonte para pesquisas no NuGet
Clicar então com o botão direito do mouse sobre o item References do projeto TesteConsumoWebAPI (Imagem 3), acionando a opção “Manage NuGet Packages…”.
Imagem 3: Acessando a tela para pesquisa através do NuGet
Na janela “NuGet Package Manager” localizar e proceder com a instalação da biblioteca RestSharp (conforme detalhado na Imagem 4).
Imagem 4: Adicionando a biblioteca RestSharp ao projeto de testes
Alterar agora o arquivo Web.config (Listagem 1), adicionando os itens “UrlBase” (caminho-base do serviço Web API) e “CaminhoRecurso” (nome do Controller/recurso) na seção “appSettings” deste documento.
[code language=”xml”]
<?xml version=”1.0" encoding=”utf-8"?>
<configuration>
<appSettings>
…
<add key=”UrlBase” value=”http://localhost:55042/testes/" />
<add key=”CaminhoRecurso” value=”produtos” />
</appSettings>
…
</configuration>
[/code]
Listagem 1: Arquivo Web.config
Alterar o Controller Produtos adicionando ao mesmo a Action ExemploConsumoRestSharp (Listagem 2):
- Uma nova instância da classe RestClient será gerada, de forma a possibilitar a comunicação com o serviço de consulta ao catálogo de produtos. O construtor deste objeto receberá como parâmetro o endereço do serviço, o qual foi especificado anteriormente no arquivo Web.config;
- Uma referência da classe RestRequest também será criada, sendo repassados ao construtor desta estrutura o caminho do recurso (no caso o Controller do catálogo de produtos) e o tipo da requisição (GET, por se tratar de uma consulta);
- Através do objeto do tipo RestClient será encaminhada uma solicitação ao serviço de testes, por meio de uma chamada ao método Execute (este último recebe como parâmetro a referência de RestRequest criada no passo anterior). O retorno desta ação será uma instância de IRestResponse, na qual a propriedade Data representa uma coleção de instâncias com dados de produtos;
- Concluindo a codificação deste método, os dados de produtos serão informados como parâmetro ao se invocar o método View.
OBSERVAÇÃO: os tipos RestClient, RestRequest e IRestResponse encontram-se definidos no namespace RestSharp.
[code language=”csharp” highlight=”7,15"]
using System.Collections.Generic;
using System.Web.Mvc;
using System.Configuration;
using System.Net.Http;
using System.Net.Http.Headers;
using TesteConsumoWebAPI.Models;
using RestSharp;
namespace TesteConsumoWebAPI.Controllers
{
public class ProdutosController : Controller
{
…
public ActionResult ExemploConsumoRestSharp()
{
RestClient client = new RestClient(
ConfigurationManager.AppSettings[“UrlBase”]);
RestRequest requisicao = new RestRequest(
ConfigurationManager.AppSettings[“CaminhoRecurso”],
Method.GET);
IRestResponse<List<Produto>> resposta =
client.Execute<List<Produto>>(requisicao);
List<Produto> produtos = resposta.Data;
return View(produtos);
}
}
}
[/code]
Listagem 2: Classe ProdutosController
Já na Listagem 3 está o código referente à View ExemploConsumoRestSharp (a ser utilizada na geração da visualização HTML da Action de mesmo nome).
[code language=”html”]
@model IEnumerable<TesteConsumoWebAPI.Models.Produto>
<h2>Catálogo de Produtos (Exemplo de consumo de um serviço Web API com RestSharp)</h2>
<table class=”table”>
<tr>
<th style=”width: 200px;”>
Cód.Produto
</th>
<th>
Nome do Produto
</th>
<th style=”width: 120px; text-align: right;”>
Preço
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@item.CodProduto
</td>
<td>
@item.NomeProduto
</td>
<td style=”text-align: right;”>
@item.Preco.ToString(“0.00”)
</td>
</tr>
}
</table>
[/code]
Listagem 3: Arquivo ExemploConsumoRestSharp.cshtml
Por fim, na Listagem 4 está a implementação da View Index.cshtml, contemplando a chamada à Action ExemploConsumoRestSharp.
[code language=”html” highlight=”16"]
@{
ViewBag.Title = “Home Page”;
}
<div class=”jumbotron”>
<h1>Compressão em serviços Web API</h1>
<p class=”lead”>Exemplo de aplicação que consome os dados compactados de um serviço Web API.</p>
</div>
<p>
Clique em um dos links abaixo para consultar os produtos disponíveis:
</p>
<ul>
<li>@Html.ActionLink(“Consumindo os dados em .NET”, “ExemploConsumoDotNet”, “Produtos”)</li>
<li>@Html.ActionLink(“Consumindo os dados em jQuery”, “ExemploConsumojQuery”, “Produtos”)</li>
<li>@Html.ActionLink(“Consumindo os dados com RestSharp”, “ExemploConsumoRestSharp”, “Produtos”)</li>
</ul>
[/code]
Listagem 4: Arquivo Index.cshtml
Testes
Para a realização dos testes descritos nesta seção será necessário que:
- O serviço de consulta ao catálogo de produtos esteja em execução;
- Iniciar a aplicação TesteConsumoWebAPI a partir do Visual Studio.
Na Imagem 5 está a tela inicial da aplicação TesteConsumoWebAPI (o link para o teste envolvendo o uso da biblioteca RestSharp está destacado em vermelho).
Imagem 5: Tela inicial da aplicação TesteConsumoWebAPI
Ao acionar o link “Consumindo os dados com RestSharp” será exibida a listagem de produtos obtida a partir do processamento da Action ExemploConsumoRestSharp (Imagem 6).
Imagem 6: Consulta ao catálogo de produtos via RestSharp
Conclusão
A biblioteca RestSharp é mais uma das opções para o uso de serviços RESTful em aplicações .NET (alternativamente, o package Microsoft ASP.NET Web API 2.2 Client Libraries também poderia ser utilizado). A intenção ao se empregar esta biblioteca está em simplificar a interação com Web APIs, através de um processo simplificado de montagem das requisições que serão enviadas a um serviço.
Espero que este conteúdo possa ter sido útil.
Até uma próxima oportunidade!
Referências
ASP.NET Web API
http://www.asp.net/web-api
RestSharp — Wiki
https://github.com/restsharp/RestSharp/wiki