Compartilhar via


Visual Studio 2015: Implementando uma aplicação Web API

O objetivo deste artigo é detalhar as mudanças que aconteceram na construção de serviços Web API com o ASP.NET Core 1.0, partindo para isto da implementação de um exemplo prático no Visual Studio 2015.

Introdução

Desde 2014 a Microsoft vem trabalhando no lançamento de novas versões do Visual Studio e da plataforma ASP.NET. No caso específico do Visual Studio 2015, inúmeros melhoramentos foram concebidos com o intuito de simplificar e tornar mais produtiva a construção de aplicações, com um excelente suporte para a implementação de projetos multiplataforma. Já o ASP.NET Core 1.0 (anteriormente batizado de ASP.NET 5) foi totalmente reformulado em relação às versões anteriores, buscando priorizar as principais tendências do momento para o desenvolvimento Web, além de levar em conta o peso cada vez maior de ambientes de cloud computing na área de Tecnologia da Informação.

Uma das principais novidades introduzidas pelo ASP.NET Core 1.0 foi um modelo de programação que unifica as tecnologias MVC e Web API. O framework Web API vem sendo utilizado há algum tempo por desenvolvedores .NET na implementação de serviços baseados na arquitetura REST (sigla em inglês para “Representational State Transfer”), em que recursos são representados por meio de endereços únicos/URLs:

  • Dados manipulados por uma aplicação sob a forma de objetos constituem exemplos de recursos. As informações correspondentes podem ser consumidas no padrão JSON (que é a abordagem mais comum) ou, mesmo, como XML;
  • Um endereço único contém informações que identificam um recurso junto ao serviço responsável por controlar tal estrutura;
  • Requisições enviadas a um serviço devem conter uma indicação da operação a ser realizada em um recurso (na prática, isto implica na geração de solicitações HTTP como GET, POST, PUT ou DELETE).

Serviços que estejam em conformidade com as diretrizes propostas pelo modelo REST são também conhecidos como RESTful Web Services. Na imagem apresentada a seguir está uma representação esquemática deste tipo de arquitetura:

Na próxima seção será demonstrado como um serviço Web API pode ser criado no Visual Studio 2015. A ideia com isto é detalhar, em linhas gerais, as principais mudanças que projetos deste tipo sofreram com o ASP.NET Core 1.0.

Implementando um serviço Web API no Visual Studio 2015

Procurando demonstrar as modificações pelas quais passou o framework Web API no novo ASP.NET, será criada uma solução que faz uso dos seguintes recursos:

  • O Microsoft Visual Studio 2015 CTP 6 como IDE de desenvolvimento;
  • O .NET Framework 4.6;
  • O ASP.NET 5 para a criação de uma aplicação Web API.

A solução descrita neste artigo foi disponibilizada no Technet Gallery, podendo ser baixada através do link:

https://gallery.technet.microsoft.com/Exemplo-de-aplicao-Web-API-0a98882b

O exemplo apresentado nesta seção será o de um serviço responsável pela conversão de distâncias em milhas para um valor equivalente em quilômetros. A fim de cumprir tal objetivo será implementada uma aplicação chamada “TesteVS2015WebAPI”. Este projeto será do tipo “ASP.NET Web Application”:

Selecionar na sequência o template “ASP.NET 5 Preview Web API”:

Na figura apresentada a seguir estão as estruturas disponibilizadas inicialmente para o projeto TesteVS2015WebAPI:

Dentre os diferentes elementos gerados imediatamente após a criação da aplicação, é possível destacar:

  • A existência de duas referências a recursos do novo ASP.NET (no caso, ASP.NET 5 e ASP.NET Core 5.0);
  • O arquivo HomeController.cs, no qual se encontra a definição de um Controller empregado na exibição de páginas que descrevem a estrutura dos serviços que compõem um projeto;
  • O arquivo ValuesController.cs, com a implementação de um serviço Web API de exemplo que deverá ser removido (um novo Web Service será implementado mais adiante);
  • A View Index.cshtml, utilizada por HomeController como página inicial do site em que estarão hospedados os serviços Web API de um projeto;
  • O arquivo project.json, no qual estão definições e configurações gerais de uma aplicação (como dependências de pacotes do NuGet). Este documento substitui os arquivos com extensão .csproj (típicos de uma aplicação baseada no uso de C#);
  • O arquivo Startup.cs, que contém uma classe chamada Startup (cuja finalidade é substituir as funcionalidades do antigo Global.asax).

O próximo passo agora será a criação de uma nova classe que terá por nome “Distancia” (este tipo ficará dentro de uma pasta chamada “Models”):

Na listagem especificada a seguir está a definição da classe Distancia, a qual contará com propriedades indicando uma distância em quilômetros e seu equivalente em milhas:

namespace TesteVS2015WebAPI.Models
{
    public class  Distancia
    {
        public double  ValorKm { get; set; }
        public double  ValorMilhas { get; set; }
    }
}

Um novo Controller chamado ConversorDistanciasController também deverá ser criado, através da seleção do template “Web API Controller Class”:

O Controller ConversorDistanciasController corresponde à implementação do serviço de conversão de distâncias. O código para este componente encontra-se na próxima listagem, sendo que é possível observar no mesmo:

  • A classe ConversorDistanciasController herda do tipo básico Controller (namespace Microsoft.AspNet.Mvc), o qual contém os recursos básicos para a definição de Controllers tanto em Web API, quanto em projetos MVC. Em versões anteriores do framework Web API um serviço deveria herdar da classe ApiController (namespace System.Web.Http), a qual representava a implementação padrão para estruturas deste tipo;
  • Nota-se ainda a ausência de referências ao namespace System.Web, que deixou de existir em virtude do processo de reformulação completa pelo qual está passando a plataforma ASP.NET;
  • A classe ConversorDistanciasController foi marcada com o atributo RouteAttribute (namespace Microsoft.AspNet.Mvc), de forma que chamadas ao serviço de conversão de distâncias utilizem como caminho-base o valor “/api/conversordistancias”;
  • Já o atributo HttpGetAttribute (namespace Microsoft.AspNet.Mvc) está associado ao método ConverterMilhasParaKm, ajuste este que fará com que requisições do tipo HTTP GET enviadas ao serviço conversor sejam manipuladas pela operação aqui descrita. O parâmetro indicado em HttpGetAttribute determina que as solicitações a serem tratadas por ConverterMilhasParaKm tenham como endereço o valor "/api/conversordistancias/MilhasKm/{distanciaMilhas}", em que "{distanciaMilhas}" representa a distância em milhas a ser convertida. O retorno do método ConverterMilhasParaKm será uma instância do tipo Distancia, na qual constarão um valor em milhas e seu equivalente em quilômetros. Tal objeto será consumido por aplicações que acessem o serviço conversor utilizando os formatos JSON ou XML (o processo de conversão para estes padrões é executado automaticamente pelo engine do ASP.NET, de uma maneira transparente e que dispensa a necessidade de código efetuando transformações específicas).
using Microsoft.AspNet.Mvc;
using TesteVS2015WebAPI.Models;
 
namespace TesteVS2015WebAPI.Controllers.Controllers
{
    [Route("api/[controller]")]
    public class  ConversorDistanciasController : Controller
    {
        [HttpGet("MilhasKm/{distanciaMilhas}")]
        public Distancia ConverterMilhasParaKm(double distanciaMilhas)
        {
            Distancia distancia = new  Distancia();
            distancia.ValorMilhas = distanciaMilhas;
            distancia.ValorKm = distanciaMilhas * 1.609;
 
            return distancia;
        }
    }
}

OBSERVAÇÃO: Por convenção, nomes de classes que representam atributos terminam com o sufixo Attribute. A utilização de expressões que envolvam um atributo vinculado a uma estrutura de código dispensa o uso de tal sufixo ao final do nome. Logo, ao se empregar o atributo RouteAttribute, a classe marcada com essa construção estará associada apenas a uma instrução com o valor “Route” (entre colchetes).

Após os diversos ajustes detalhados nesta seção, o projeto TesteVS2015WebAPI estará com uma estrutura similar àquela indicada na imagem seguinte:

Testes

Primeiramente, será necessário iniciar a execução da aplicação TesteVS2015WebAPI a partir do Visual Studio. Para o teste descrito a seguir será utilizada a seguinte URL (o valor “53254” corresponde a uma porta disponível no momento de geração do projeto TesteVS2015WebAPI):

http://localhost:53254/api/conversordistancias/MilhasKm/100

Uma requisição será então encaminhada ao serviço conversor de distâncias através do utilitário Fiddler, conforme é possível observar na próxima figura. O Fiddler é uma ferramenta gratuita, normalmente utilizada em testes e monitoramento de Web Services (ao final do artigo está um link para informações e download desta solução.

Já o retorno gerado pelo serviço encontra-se na imagem seguinte (na qual está em destaque uma string JSON representando o objeto produzido como resultado, além de outros detalhes relativos à requisição enviada ao Web Service):

Conclusão

Este artigo procurou demonstrar as mudanças que ocorreram na implementação de soluções Web API no ASP.NET 5, através de um exemplo simples criado por meio do novo Visual Studio. Por mais que tenham ocorrido alterações significativas na forma como aplicações ASP.NET são estruturadas, as lições aprendidas em versões anteriores do framework Web API ainda continuam válidas.

Quanto ao Visual Studio 2015 e ao próprio ASP.NET 5, é possível pressupor que ainda no decorrer de 2015 acontecerá a disponibilização das versões definitivas destes produtos.

Referências

Fiddler - free web debugging proxy
http://www.telerik.com/fiddler

Introducing ASP.NET 5
http://weblogs.asp.net/scottgu/introducing-asp-net-5

Create a Web API in MVC 6
http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6