restsharp-00

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:

http://netcoders.com.br/compressao-web-api/

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:

http://netcoders.com.br/compressao-web-api-parte-2/

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:

https://api.nuget.org/v3/index.json

Acessar para isto o menu Tools > NuGet Package Manager > Package Manager Settings (Imagem 1).

restsharp-01
Imagem 1: Configurando o uso do NuGet

Na janela “Options” especificar o caminho indicado anteriormente para a pesquisa de packages do NuGet (Imagem 2):

restsharp-02
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…”.

restsharp-03
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).

restsharp-04
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.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>

    ...

    <add key="UrlBase" value="http://localhost:55042/testes/" />
    <add key="CaminhoRecurso" value="produtos" />
  </appSettings>

  ...

</configuration>

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.

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);
        }
    }
}

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).

@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>

Listagem 3: Arquivo ExemploConsumoRestSharp.cshtml

Por fim, na Listagem 4 está a implementação da View Index.cshtml, contemplando a chamada à Action ExemploConsumoRestSharp.

@{
    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>

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).

restsharp-05
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).

restsharp-06
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

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Comentários

comentarios