Consumo de APIs em .NET Core: utilizando a Marvel Comics API

Renato Groffe
Jul 23, 2017 · 4 min read

Este artigo tem por objetivo demonstrar o consumo de APIs REST em .NET Core, utilizando para isto recursos que integram uma API disponibilizada gratuitamente pela Marvel Comics.


Introdução

O consumo de APIs REST é uma prática extremamente comum nos mais variados tipos de aplicações. Muito deste trabalho consiste no envio de requisições contendo configurações para autenticação como tokens e chaves de acesso, com o consequente recebimento de dados no padrão JSON (o padrão XML representa ainda outra possibilidade).

A implementação de soluções na plataforma .NET não foge a esta regra. No caso específico do .NET Core temos a classe HttpClient (namespace System.Net.Http), a qual disponibiliza meios para o envio de solicitações HTTP e o posterior tratamento das respostas obtidas.

Este artigo tem por objetivo demonstrar o consumo de APIs REST em uma aplicação ASP.NET Core 1.1. Isto acontecerá através de um exemplo de utilização da Marvel Comics API, um conjunto de recursos gratuitos que permite o acesso a um vasto conteúdo de informações sobre personagens do universo Marvel.


Obtendo o acesso à Marvel Comics API

Para acessar os recursos da Marvel Comics API serão utilizadas uma chave pública e outra privada, com a geração das mesmas acontecendo por meio do cadastramento de um login no seguinte portal:

https://developer.marvel.com/

Na imagem a seguir é possível observar as informações de uma conta de desenvolvimento para uso da Marvel Comics API. Além das chaves pública e privada, será necessário indicar ainda os domínios de aplicações que utilizarão a API (nota-se ainda um aviso com um limite diário de uso):

A documentação dos diferentes recursos que integram a Marvel Comics API está disponível no seguinte endereço:

https://developer.marvel.com/docs

Esta API faz uso do Swagger para a documentação e teste das funcionalidades existentes, conforme detalhado na próxima imagem:

Detalhes adicionais sobre assinaturas e envio de requisições podem ser encontrados no link a seguir:

https://developer.marvel.com/documentation/authorization


Exemplo de consumo com o .NET Core

O código-fonte da aplicação apresentada nesta seção já está no GitHub:

https://github.com/renatogroffe/ASPNETCore_MarvelComicsAPI

A Marvel Comic API será acessada através do seguinte endereço:

http://gateway.marvel.com/v1/public/

Uma classe chamada Personagem será implementada, a fim de facilitar a passagem de informações entre o Controller e a View responsáveis pela exibição de informações:

A Action Index de HomeController acessará a API da Marvel, empregando para isto uma instância do tipo HttpClient:

  • Inicialmente será configurado o formato utilizado na comunicação (JSON), com isto acontecendo por meio da propriedade DefaultRequestHeaders e de uma instância da classe MediaTypeWithQualityHeaderValue (namespace System.Net.Http);
  • Requisições enviadas à API deverão conter como parâmetros um timestamp (sequência de identificação de cada requisição), a chave pública e um hash criptografado baseado no padrão MD5;
  • Para o timestamp será utilizada a propriedade Ticks obtida via data atual do sistema (essa estrutura retornará um valor do tipo long);
  • A função GerarHash concatenará o timestamp e as duas chaves (pública e privada), fazendo uso para isto dos tipos Encoding (namespace System.Text), MD5 (namespace System.Security.Cryptography) e BitConverter (namespace System). Como resultado será produzida uma string com o hash esperado pela API;
  • A solicitação será enviada à API da Marvel, a partir da invocação do método GetAsync do objeto client. Essa operação receberá como parâmetro a URL para consulta a informações de personagens Marvel, estando configurada para retornar detalhes (em inglês) sobre o Capitão América. O resultado desta ação será uma referência do tipo HttpResponseMessage (namespace System.Net.Http);
  • A chamada ao método EnsureSuccessStatusCode de HttpResponseMessage fará com que a mensagem recebida seja validada, lançando uma exceção no caso de um eventual problema;
  • Ao acionar a operação ReadAsStringAsync via propriedade Content do objeto response será retornada uma string JSON com informações;
  • O método DeserializeObject da classe JsonConvert (namespace Newtonsoft.Json) receberá como parâmetro essa string, devolvendo um objeto que será associado à variável dinâmica resultado;
  • Uma instância da classe Personagem será finalmente gerada, empregando para isto dados obtidos através do conteúdo associado à variável resultado. O método View é então invocado, recebendo como parâmetro esta última referência.

Na View Index.cshtml serão exibidas as informações obtidas ao acessar a API da Marvel em HomeController:


Testes

Ao executar a aplicação a partir do Visual Studio 2017 aparecerão informações em inglês sobre o personagem Capitão América:


Renato Groffe

Written by

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade