Utilizando tipos anônimos no ASP.NET Web API

Mecanismo disponibilizado a partir da versão 3.5 do .NET Framework, os tipos anônimos (em inglês “anonymous types”) são construções concebidas com o intuito de facilitar a manipulação de objetos com estruturas simplificadas. Graças a este recurso é possível a criação novas de instâncias, sem que isto implique na necessidade de se declarar uma classe.

No caso específico da linguagem C#, a geração de novos objetos acontece através da declaração de variáveis empregando as palavras-chaves “var” e “new”: as propriedades associadas a tal referência serão somente leitura, com o preenchimento das mesmas acontecendo durante o processo de inicialização de uma instância. Na Listagem 1 é possível observar um exemplo de criação de um objeto baseado em um tipo anônimo.

A declaração de variáveis com “var” dispensa a necessidade de se indicar um tipo explicitamente, com esta prática exemplificando o de uso de um conceito conhecido como inferência de tipos. É importante destacar que tal capacidade permite ao compilador do .NET Framework e ao editor de código do Visual Studio determinar a estrutura dos dados/objetos que foram associados a uma variável, independentemente do tipo desta última (que pode ou não ser anônimo).

Listagem 1: Exemplo de uso de um tipo anônimo

public void MetodoExemplo()
{
    var pais = new
               {
                   NomePais = "Brasil",
                   Capital = "Brasília",
                   Regiao = "América do Sul"
               };

    ...

    string nomePais = pais.NomePais;
    string capital = pais.Capital;
    string regiao = pais.Regiao;

    ...

}

O uso de tipos anônimos é justificável em cenários mais simplificados, nos quais a criação de uma nova classe geraria uma complexidade desnecessária. Alguns casos que exemplificam isto seriam conversões envolvendo unidades de medida, assim como contagens, totalizações e a identificação de valores mínimos e máximos a partir de uma coleção de objetos/valores.

Levando em conta tais situações na implementação de serviços com o ASP.NET Web API, a utilização de tipos anônimos pode se revelar como uma boa alternativa no retorno de dados dos mais variados formatos. Diferentemente de Web Services construídos sob o protocolo SOAP, serviços RESTful não exigem a criação de classes de dados que sigam um contrato previamente definido (algo que viabiliza então o uso dos tipos anônimos em soluções Web API).

Na Listagem 2 é possível observar um exemplo de tal prática:
– A classe ConversorTemperaturaController (pertencente a um projeto chamado TesteWebAPI.TiposAnonimos) define um serviço que será utilizado para a conversão de temperaturas. Partindo de um valor medido em graus Celsius, um objeto anônimo será gerado e retornado pelo método Get com as transformações para as escalas Kelvin e Fahrenheit;
– O retorno do método Get será uma instância do tipo object. O engine do framework Web API será capaz de converter o objeto correspondente, serializando o mesmo de acordo com o padrão JSON.

Listagem 2: Exemplo de utilização de um tipo anônimo em um serviço Web API

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace TesteWebAPI.TiposAnonimos.Controllers
{
    public class ConversorTemperaturaController : ApiController
    {
        public object Get(double grausCelsius)
        {
            return new
            {
                Celsius = grausCelsius,
                Fahrenheit = ((9.0 / 5.0) * grausCelsius) + 32,
                Kelvin = grausCelsius + 273.15
            };
        }
    }
}

OBSERVAÇÃO: O projeto TesteWebAPI.TiposAnonimos foi criado empregando a versão 2.2 do ASP.NET Web API.

Testando o serviço de exemplo

Para os testes descritos a seguir será utilizada a seguinte URL (o valor “54883” corresponde a uma porta disponível no momento de geração do projeto TesteWebAPI.TiposAnonimos):

http://localhost:54883/api/conversortemperatura?grauscelsius=30

Como primeiro teste, uma requisição será encaminhada ao serviço conversor de temperaturas através do utilitário Fiddler. Na Imagem 1 está o retorno desta ação, com a resposta produzida pelo Web Service já no formato JSON.

Imagem 1. Teste do serviço de conversão via utilitário Fiddler

Imagem 1. Teste do serviço de conversão via utilitário Fiddler

Uma importante ressalva deve ser feita no que se refere a tentativas de consumo do serviço criado no formato XML. Ao se efetuar um teste de acesso ao Web Service via Google Chrome, um erro como o indicado na Imagem 2 será retornado. Isto se deve ao fato da serialização em XML depender, por default, de tipos concretos formados por propriedades públicas. Este comportamento pode não representar um grande empecilho, desde que o acesso ao serviço considerado se restrinja ao uso do padrão JSON.

Imagem 2. Erro ao se consumir o serviço de exemplo no formato XML

Imagem 2. Erro ao se consumir o serviço de exemplo no formato XML

Conclusão

Encerro aqui mais um post. O objetivo desta vez foi demonstrar como tipos anônimos podem simplificar a implementação de Actions em serviços Web API, partindo para tanto do pressuposto de que o consumo de informações estará baseado no formato JSON.

Espero que o conteúdo apresentado possa ser útil no seu dia-a-dia.

Até uma próxima oportunidade!

Renato Groffe – Consultor em TI, MCTS
http://rgroffe.wordpress.com/

Referências

Anonymous Types (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/vstudio/bb397696(v=vs.120).aspx

ASP.NET Web API
http://www.asp.net/web-api

ASP.NET Web API: Implementando serviços RESTful
http://www.devmedia.com.br/asp-net-web-api-implementando-servicos-restful/31024

Utilitário Fiddler: Monitoramento de Web Services
http://www.devmedia.com.br/utilitario-fiddler-monitoramento-de-web-services/31274

Comentarios

comentarios

One Response to Utilizando tipos anônimos no ASP.NET Web API
  1. […] http://www.tiselvagem.com.br/geral/tipos-anonimos-asp-net-web-api/ […]... tiselvagem.com.br/geral/mensagens-de-erro-servicos-web-api