Windows Azure Marketplace DataMarket

Apresentando o DataMarket

Elisa Flasko

O Windows Azure Marketplace DataMarket, anunciado primeiramente como Microsoft Project codinome “Dallas” na PDC09, muda a maneira como as informações são trocadas oferecendo uma ampla gama de conteúdo de fontes comerciais e públicas fidedignas em um único mercado. Isso facilita a localização e a aquisição de dados necessários para ativar seus aplicativos e análises.

Se eu estivesse desenvolvendo um aplicativo para identificar e planejar paradas em uma viagem rodoviária, iria precisar de muitos dados de diferentes fontes. O aplicativo poderia primeiro solicitar que o usuário inserisse um destino final e todas as paradas que quisesse fazer ao longo do caminho. Ele poderia extrair o local atual do GPS ou solicitar que o usuário inserisse um local de início e usaria esses locais para mapear a melhor rota para a viagem. Depois de mapear a viagem, o aplicativo poderia se comunicar com o Facebook e identificar amigos que moram ao longo da rota e que eu quisesse visitar. Ele poderia obter as previsões do tempo das cidades que fossem identificadas como paradas, bem como identificar os pontos de interesse, os postos de combustível e os restaurantes como possíveis paradas ao longo do caminho.

Antes do DataMarket, primeiro eu precisaria descobrir fontes de todos os diferentes tipos de dados necessários para o meu aplicativo. Isso poderia envolver visitas a inúmeros sites de empresas para determinar se elas possuem os dados desejados e se eles são oferecidos para venda em um pacote e preço convenientes para as minhas necessidades. Em seguida, eu precisaria adquirir os dados diretamente de cada empresa. Por exemplo, eu poderia ir diretamente a uma empresa como a Infogroup para adquirir os dados que me permitiriam identificar pontos de interesse, postos de combustível e restaurantes ao longo da rota; a uma empresa como a NavTeq, para obter os relatórios de tráfego atuais; e a uma empresa como a Weather Central para obter as previsões do tempo. É provável que cada uma dessas empresas fornecesse os dados em um formato diferente, algumas me enviando um DVD, outras por meio de um serviço Web, uma planilha do Excel etc.

Atualmente, com o DataMarket, criar esse aplicativo é muito mais simples. O DataMarket fornece um único local — um mercado de dados — onde posso procurar, explorar, experimentar e adquirir os dados necessários para desenvolver o meu aplicativo. Ele também fornece os dados para mim através de uma interface uniforme, em um formato padrão (OData — consulte OData.org para obter mais informações). Com a exposição dos dados como OData, o DataMarket garante que eu possa acessá-los em qualquer plataforma (o requisito mínimo é uma pilha HTTP) e de qualquer um dos muitos aplicativos que dão suporte a OData, inclusive aplicativos como o Microsoft PowerPivot para Excel 2010, que dá suporte nativamente a OData.

O DataMarket fornece um único mercado para que vários provedores de conteúdo disponibilizem seus dados para venda por meio de algumas ofertas diferentes (cada oferta pode disponibilizar um subconjunto ou uma exibição diferente dos dados, ou pode disponibilizá-los com diferentes termos de uso). Os provedores de conteúdo especificam os detalhes de suas ofertas, inclusive os termos de uso que regem uma compra, o modelo de preço (na versão 1, as ofertas são disponibilizadas por meio de uma assinatura mensal) e o preço.

Introdução ao DataMarket

Para começar, eu me registro no DataMarket usando meu Windows Live ID e faço logon no site. A partir daí, posso pesquisar os conjuntos de dados disponíveis no site, exibindo os detalhes de cada um (descrição, preço, visualizações, termos de uso etc.) para determinar quais publicadores entregam o tipo de dados que estou procurando e quais ofertas são mais adequadas às minhas necessidades.

Embora eu precise encontrar um conjunto de dados que esteja de acordo com os requisitos técnicos do meu aplicativo, é importante verificar também se os termos de uso definidos pelo publicador permitem que os dados sejam usados da maneira que o meu aplicativo requer. Os termos de uso podem variar amplamente entre os conjuntos de dados e entre os publicadores. Eu posso ver os termos de uso de um conjunto de dados específico entre os detalhes da oferta.

Após fazer uma busca geral, descubro que o serviço Infogroup Business Database talvez seja interessante para o meu aplicativo de viagem rodoviária. Depois de verificar as visualizações dos dados disponíveis (uma amostra dos dados no formato de tabela ou, em alguns casos, uma visualização dos dados em um mapa ou um gráfico), parece que eles me fornecerão os pontos de interesse que incluem hotéis, restaurantes e postos de combustível ao longo da rota, e devem atender aos meus requisitos. Depois de determinar quais conjuntos de dados são adequados às minhas necessidades, eu posso optar por adquirir uma assinatura mensal do serviço, o que me permite um número ilimitado de consultas mensais ao serviço, e posso simplesmente pagar com um cartão de crédito. Depois de adquirir algo, posso gerenciar minha conta e ver todas as minhas assinaturas atuais na seção Account (Conta) do Marketplace. Essa seção também pode ser usada para criar e gerenciar chaves de conta, que eu utilizo para acessar minhas assinaturas. Ao acessar os dados em um aplicativo como o PowerPivot, eu preciso fornecer minha chave de conta. Da mesma forma, ao desenvolver um aplicativo, ele autenticará com uma chave de conta.

Depois que eu adquiro uma oferta de dados, o DataMarket inclui um Service Explorer (Gerenciador de serviços), como pode ser visto na Figura 1, que me permite explorar um conjunto de dados criando consultas e visualizando os resultados, aprendendo efetivamente mais sobre os dados e o esquema que cada conjunto de dados disponibiliza.

image: DataMarket Service Explorer

Figura 1 Service Explorer do DataMarket

Se eu abrir o serviço Infogroup Business Database no Service Explorer, poderei criar consultas que filtrarão os dados por cidade, estado e CEP para localizar locais ao longo da rota planejada. Por exemplo, se eu especificar Seattle como a cidade e WA como o estado e clicar em “Execute query” (Executar consulta), obterei uma visualização que incluirá os 100 primeiros resultados do serviço. A visualização me mostra que existe um Westin Hotel em Seattle, que eu desejo que o meu aplicativo inclua na lista de paradas. Por padrão, quando eu clico em Preview (Visualização), os resultados são exibidos no lado direito do gerenciador em um formato tabular básico para facilitar a leitura. Mas eu também posso exibir o formato OData Atom que usarei no meu aplicativo, ali mesmo no Service Explorer, ou posso exibir os dados brutos no mesmo formato originalmente fornecido pelo Infogroup.

Se eu não fosse um desenvolvedor ou se o meu objetivo não fosse criar um aplicativo com esses dados, mas apenas extrair os dados para uma ferramenta existente que entendesse OData — como o PowerPivot para Excel 2010 — eu também poderia fazer isso diretamente do DataMarket, bastando entrar, abrir minha lista de assinaturas atual e clicar na oferta de dados. A partir daí, eu receberei a opção de abrir a oferta de dados no aplicativo da minha escolha. (Para obter mais informações sobre como usar o DataMarket com o PowerPivot, incluindo um tutorial passo a passo, verifique o blog da equipe do DataMarket em blogs.msdn.com/b/dallas.)

Consumindo dados do OData

Você já criou um aplicativo que consome dados de um serviço OData? Se a resposta for sim, você está praticamente pronto para consumir dados do DataMarket em seu aplicativo, pois a maioria dos serviços do DataMarket são expostos com o uso do OData. Vou abordar rapidamente as noções básicas do consumo de dados do OData.

Se eu começar com um aplicativo existente e for apenas adicionar novos recursos que utilizem dados do DataMarket, ou se eu estiver criando um novo aplicativo desde o início, a primeira etapa para extrair dados do serviço DataMarket será definir as classes que vou utilizar para representar os dados no meu aplicativo. Posso fazer isso codificando minhas próprias classes POCO (Objeto C# simples) ou usando o Assistente para Adicionar Referência de Serviço no Visual Studio, para gerar as classes necessárias.

Como já descrito anteriormente, o publicador (o proprietário dos dados) especifica como os dados de cada conjunto de dados são expostos e os termos de uso que determinam como os dados podem ser usados após serem adquiridos. Isso inclui a especificação de como (ou se) um usuário pode criar consultas ad hoc em um conjunto de dados, quais campos um usuário pode consultar para recuperar os dados e quais campos são retornados. Em alguns casos, um publicador pode especificar que os usuários não podem criar consultas ad hoc e devem usar métodos Web fixos para solicitar dados do serviço. Como desenvolvedor, antes de começar a escrever um aplicativo, eu precisarei procurar no documento do Serviço Atom uma oferta específica para determinar se ela expõe quaisquer conjuntos de entidades para consulta. Posso fazer isso apontando o navegador para o URI raiz de uma oferta. Se o documento do serviço não contiver nenhum conjunto, a oferta não irá expor conjuntos de entidades para consulta e eu precisarei acessar o conjunto de dados usando métodos Web fixos. Por exemplo, vamos examinar os documentos do Serviço Atom de dois conjuntos de dados separados, um que expõe um conjunto de entidades para consulta (Data.Gov Crime Data) e outro que não permite nenhuma consulta (AP Data). Observe nos exemplos de código a seguir que a oferta AP não possui nenhum nó <collection> (representando conjuntos de entidades expostos) no documento do serviço.

Aqui está um documento do Serviço Atom para a oferta Data.gov Crime, que expõe conjuntos de entidades para consulta. Esta oferta em particular expõe um único conjunto de entidades, CityCrime:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes"  
  xmlns:atom=
  "http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
   <collection href="CityCrime">
     <atom:title>CityCrime</atom:title> 
   </collection>
 </workspace>
</service>

Aqui está um documento do Serviço Atom para a oferta AP, que não permite consulta ad hoc:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes" 
  xmlns:atom="http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
 </workspace>
</service>

Se o conjunto de dados que estou usando expuser conjuntos de entidades para consulta, eu poderei usar a opção Adicionar Referência de Serviço no Visual Studio, assim como eu utilizo para um serviço do Windows Communication Foundation (WCF). Basta clicar com o botão direito do mouse no projeto e escolher Adicionar Referência de Serviço. Na caixa de diálogo Adicionar Referência de Serviço, eu insiro o URI do ponto de entrada do serviço (pode ser obtido na página Service Explorer no DataMarket) como o Endereço e clico em OK.

No entanto, se o conjunto de dados que estou usando não permitir consulta ad hoc, não poderei usar a opção Adicionar Referência de Serviço. Nesse caso, posso codificar minhas próprias classes POCO que representam as entidades (ou os objetos) retornados dos métodos Web fixos que eu chamar. O DataMarket utiliza a Autenticação Básica, passando um Windows Live ID como o nome do usuário e uma chave de conta do DataMarket associada no campo de senha. Para o exemplo de aplicativo de console (veja a Figura 2), eu utilizei a opção Adicionar Referência de Serviço no Visual Studio para gerar as classes. O Visual Studio irá acessar o serviço e gerar as classes associadas com base na definição do serviço de dados e irá adicioná-las ao projeto. Depois que minhas classes forem geradas, eu continuarei a desenvolver o meu aplicativo da mesma maneira que faria com qualquer aplicativo que consome dados de um serviço OData, usando autenticação básica ou os Serviços de Coleta de Auditoria para autenticação no serviço. O exemplo da Figura 2 configura um aplicativo de console simples usando a Autenticação Básica.

Figura 2 Um aplicativo de console simples acessando um serviço de dados e imprimindo os resultados

public class Program
  {
       
    static void Main(string[] args)
    {
        GetCityCrime X = new GetCityCrime();

        IList<CityCrime> stats = X.getStats();

        foreach (CityCrime c in stats)
        {
            Console.WriteLine(c.City + " : " + c.AggravatedAssault);
        }
        Console.ReadLine();
    }               
  }

  public class GetCityCrime
  {
    Uri serviceUri;
    datagovCrimesContainer context;

    public GetCityCrime()
    {
      serviceUri = 
        new Uri("https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes");
      context = new datagovCrimesContainer(serviceUri);
      context.Credentials = new NetworkCredential(" ", "
        <my account key as copied from DataMarket>");
    }

    public IList<CityCrime> getStats()
    {
      IEnumerable<CityCrime> query; 

       query = from c in context.CityCrime
             where c.State == "Alaska"
             select c;

       return query.ToList();
    }
  }

Observação: para executar o código de exemplo daFigura 2*, você precisará se registrar como um cliente do DataMarket e assinar a oferta Data.Gov Crime Statistics. Observe também que o URI usado nesse exemplo refere-se a um pré-lançamento da versão de fabricação do serviço; você pode encontrar o URI correto fazendo logon no DataMarket, indo para My Datasets (Meus conjuntos de dados) e acessando a sua assinatura da oferta Data.gov Crime Statistics.*

Para obter mais detalhes sobre como escrever aplicativos que consomem serviços de dados, consulte “Entity Framework 4.0 e WCF Data Services 4.0 no Visual Studio 2010” (msdn.microsoft.com/magazine/ee336128) e “Expor e utilizar dados no mundo de serviços Web” (msdn.microsoft.com/magazine/cc748663).

Vendendo dados no DataMarket

Muitos aplicativos e sites populares geram, armazenam e consomem grandes quantidades de dados valiosos. Porém, em geral, esses dados só são aproveitados no aplicativo para o qual são criados. A introdução do WCF Data Services e do OData tornou mais simples para os desenvolvedores a exposição dos seus dados para uso mais amplo, oferecendo uma plataforma de serviços de dados e facilitando o uso dos dados não só no aplicativo pretendido inicialmente, como também em aplicativos de terceiros. Agora, com o DataMarket, há uma oportunidade simples para que, além de expor esses dados aos aplicativos que eles criam, os desenvolvedores também gerem lucro com a venda dos dados que eles já precisam armazenar e manter.

O DataMarket se baseia no Windows Azure e no SQL Azure e permite que os publicadores criem conjuntos de dados para os dados que eles hospedam no SQL Azure. Se os meus dados já estiverem armazenados no SQL Azure, eu estarei praticamente pronto para oferecer dados para venda no DataMarket. Para saber mais sobre como você pode se tornar um publicador do DataMarket, consulte blogs.msdn.com/b/dallas.

Elisa Flasko é gerente de programas da equipe do Windows Azure Marketplace DataMarket da Microsoft. Para entrar em contato com ela, visite seu blog em blogs.msdn.com/elisaj.

Agradecemos aos seguintes especialistas técnicos pela revisão deste artigo: Rene Bouw, Moe Khosravy e Adam Wilson