DataMarket de Windows Azure Marketplace

Introducción a DataMarket

Elisa Flasko

DataMarket de Windows Azure Marketplace, el cual se anunció por primera vez con el nombre de código del proyecto de Microsoft “Dallas” en PDC09, cambia la manera en la que se intercambia la información al ofrecer una amplia gama de contenido desde fuentes comerciales y públicas autorizadas en un solo mercado. Esto facilita encontrar y comprar los datos que necesita para darle mayor fuerza a sus aplicaciones y análisis.

Si estuviese desarrollando una aplicación para identificar y planificar paradas en un viaje, necesitaría muchos datos de varias fuentes diferentes. La aplicación podría pedir primero al usuario que escriba la dirección final y cualquier parada que quisiera hacer en el camino. Podría obtener la localización GPS actual o solicitarle al usuario que ingrese una localización de partida y que use esas localizaciones para crear un mapa con la mejor ruta para el viaje. Después de que la aplicación realice el mapa para el viaje, podría buscar en Facebook e identificar amigos que vivan en la ruta a los cuales podría querer visitar. Podría extraer las predicciones del clima para ciudades identificadas como paradas, además de identificar puntos de interés, gasolineras y restoranes que pudieran ser paradas potenciales en la ruta.

Antes de DataMarket, habría debido encontrar las fuentes para todos los tipos distintos de datos que necesito para mi aplicación. Eso podría implicar visitar sitios web de varias compañías para determinar si tienen o no los datos que quiero y si lo ofrecen en un paquete y precio que se ajuste a mis necesidades. Entonces, tendría que comprar los datos directamente de cada compañía. Por ejemplo, podría haber ido directamente a una compañía como Infogroup para adquirir los datos que me permiten identificar puntos de interés, gasolineras y restoranes en la ruta; a una compañía como NavTeq para obtener informes de tránsito recientes y a una compañía como Weather Central para las predicciones del clima. Es probable que cada una de estas compañías proporcione los datos de forma diferente, donde algunos de ellos enviará un DVD, otros enviarán la información por medio de un servicio web, una hoja de cálculo Excel, etc.

Hoy, con DataMarket, crear esta aplicación es mucho más simple. DataMarket proporciona una sola ubicación, un mercado de datos, donde se puede buscar, explorar, probar y adquirir los datos necesarios para desarrollar la aplicación. También proporciona los datos por medio de una interfaz uniforme, en un formato estándar (OData; para obtener más información, ver OData.org). Al exponer los datos como OData, DataMarket asegura que se podrá tener acceso a ella en cualquier plataforma (lo mínimo necesario es una pila de HTTP) y desde allí obtener cualquiera de las numerosas aplicaciones que son compatibles con OData, lo que incluyen aplicaciones como Microsoft PowerPivot para Excel 2010, que es compatible de forma nativa con OData.

DataMarket proporciona un solo mercado para varios proveedores de contenido, para hacer que sus datos estén disponibles a la venta por medio de un número de ofertas diferentes (cada oferta puede hacer un subconjunto o vista diferente de los datos disponibles, o hacer que los datos estén disponibles con distintos términos de uso). Los proveedores de contenido especifican los detalles de sus ofertas, lo que incluye los términos de uso que rigen una compra, el modelo de precios (en la versión 1, las ofertas se hacen disponibles por medio de una suscripción mensual) y el precio.

Introducción a DataMarket

Para empezar, me registraré en DataMarket usando mi Windows Live ID e iniciaré sesión en el sitio. A partir de aquí, puedo revisar en los conjuntos de datos actualmente disponibles en el sitio y visualizar los detalles de cada uno (descripción, precio, visualizaciones, términos de uso, etc.) para determinar cuales publicadores proporcionan el tipo de datos que busco y cual oferta se adecúa mejor a mis necesidades.

Aunque necesito encontrar un conjunto de datos que cumpla los requisitos técnicos de mi aplicación, también es importante verificar que los términos de uso establecidos por el publicador permitan usar los datos de la manera que mi aplicación necesite. Los términos de uso pueden variar enormemente de acuerdo con los conjuntos de datos y dependiendo de los publicadores. Se pueden ver los términos de uso para un conjunto de datos específico en los detalles de oferta.

Después de escarbar un poco, descubrí que el servicio de base de datos empresarial de Infogroup podría ser interesante para mi aplicación de ruta de viaje. Después de revisar las visualizaciones disponibles de los datos (una muestra de los datos en formato de tabla, o en algunos casos una visualización de los datos en un mapa o en un gráfico), parece ser que éste debiera proporcionar puntos de interés, lo que incluye hoteles, restoranes y gasolineras en la ruta, y que debe cumplir mis requisitos. Después de determinar los conjuntos de datos que satisfacen mis necesidades, puedo seleccionar adquirir una suscripción mensual al servicio, lo que debiera proporcionarme un número ilimitado de consultas al servicio al mes, y puedo pagarlo con tarjeta de crédito. Después de la compra, puedo administrar mi cuenta y ver todas las suscripciones actuales en la sección Cuenta de Marketplace. La sección Cuenta se puede usar también para crear y administrar claves de cuenta, lo cual uso para tener acceso a mis suscripciones. Al tener acceso a datos desde una aplicación tal como PowerPivot, es necesario proporcionar la clave de cuenta. De igual manera, al desarrollar una aplicación, se autenticará con una clave de cuenta.

Después de adquirir una oferta de datos, DataMarket incluye un explorador de servicios, tal como se puede observar en la figura 1, que permite explorar un conjunto de datos al crear consultas y previsualizar los resultados, lo que efectivamente permite aprender más acerca de los datos y el esquema que cada conjunto de datos hace disponible.

image: DataMarket Service Explorer

Figura 1 Explorador de servicios de DataMarket

Si abro el servicio de base de datos empresarial de Infogroup en el explorador de servicios, puedo crear consultas que se filtren por ciudad, estado y código postal para encontrar lugares en la ruta planificada. Por ejemplo, al especificar Seattle como la ciudad, Washington como el estado y al hacer clic en “Ejecutar consulta”, se regresa una vista previa que incluye los primeros 100 resultados del servicio. Podré apreciar desde la previsualización que hay un Hotel Westin en Seattle que quiero que mi aplicación incluya en la lista de paradas. De forma predeterminada, al hacer clic en Previsualizar, se mostrarán los resultados en el lado derecho del explorador, en un formato tubular básico de fácil lectura. Pero también se puede visualizar el formato Atom de OData que usaré en mi aplicación en el mismo explorador de servicios, o ver los datos sin procesar en el mismo formato proporcionado originalmente por Infogroup.

Si no fuera un desarrollador o si mi finalidad no fuera crear una aplicación con estos datos, sino que simplemente extraer los datos en una herramienta existente que maneje OData, tal como PowerPivot para Excel 2010, también podría lograr esto directamente desde DataMarket simplemente iniciando sesión, abriendo la lista de suscripciones actuales y haciendo clic en la oferta de datos. A partir de aquí, se me dará la opción de abrir la oferta de datos en la aplicación que elija (para más información acerca de cómo usar DataMarket con PowerPivot, lo que incluye una tutorial paso a paso, asegúrese de revisar el blog del equipo de DataMarket en blogs.msdn.com/b/dallas).

Consumo de OData

¿Ha creado antes una aplicación que consume datos de un servicio de OData? Si la respuesta es sí, ya ha avanzado bastante camino para consumir datos desde DataMarket en su aplicación, puesto que la mayoría de los servicios de DataMarket se exponen usando OData. Revisaré rápidamente las características básicas de consumir OData.

Ya sea que empiece a usar una aplicación existente y simplemente esté agregando nuevas características que usen datos de DataMarket, o que esté creando nuevas aplicaciones desde cero, el primer paso en la extracción de datos de un servicio de DataMarket es definir la clase que se usará para representar los datos de la aplicación. Se puede hacer esto al escribir uno mismo el código de clases de objetos C# tradicionales (POCO) o al usar el asistente para agregar referencias de servicio en Visual Studio para generar las clases necesarias.

Como se describió antes, el editor (el propietario de los datos) especifica como se exponen los datos de cada conjunto de datos y los términos de uso que dictan como se deben usar los datos después de la compra. Esto incluye especificar como un usuario puede crear consultas ad hoc a un conjunto de datos, cuales campos puede consultar el usuario para extraer los datos y cuales campos se devuelven, o si es que este puede hacerlo. En algunos casos, un editor puede especificar que los usuarios no puedan crear consultas ad hoc y deban usar métodos web fijos para solicitar datos del servicio. Como desarrollador, antes de empezar a escribir una aplicación, necesito buscar una oferta específica en el documento de servicio de Atom para determinar si la oferta expone algún conjunto de entidades para consulta. Se puede hacer esto al indicar el explorador en la URI raíz de una oferta. Si el documento de servicio no contiene ninguna colección, la oferta no expondrá conjuntos de entidad para consultas y será necesario que haga acceso al conjunto de datos usando métodos de web fijos. Por ejemplo, examinemos los documentos de servicio de Atom para dos conjuntos de datos separados, uno que expone un conjunto de entidad por consulta (los datos criminales de Data.Gov) y uno que no expone consultas en lo absoluto (datos de AP). Observe en el siguiente código de muestra que la oferta de AP no tiene nodos <collection> (que representan conjuntos de entidad expuesta) en el documento de servicio.

Este es un documento de servicio de Atom para la oferta de datos criminales de Data.gov, donde se exponen conjuntos de entidad para la consulta. Esta oferta específica expone un solo conjunto de entidad, 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>

Este es un documento de servicio de Atom para la oferta de AP, que no permite consultas 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>

Si el conjunto de datos que estoy usando expone conjuntos de entidades para consultas, se puede usar agregar referencias de servicio de Visual Studio, de la misma manera en la que se puede hacer para el servicio Windows Communication Foundation (WCF). Basta con hacer clic con el botón secundario en el proyecto y seleccionar Agregar referencias de servicio. En el cuadro de diálogo Agregar referencias de servicios, escribo la URI del extremo de entrada al servicio (se puede hacer esto desde la página de explorador de servicio en DataMarket) como la dirección y hago clic en Aceptar.

Si el conjunto de datos que estoy usando no permite consultas ad hoc, no podré usar agregar referencias de servicio. En este caso, puedo escribir el código de mis propias clases de POCO, que representen las entidades (u objetos) que sean devueltos de los métodos web fijos a los que llame. DataMarket usa autenticación básica, a la cual se le pasa una Windows Live ID como nombre de usuario y una clave de cuenta de DataMarket asociada en el campo contraseña. Para fines del ejemplo de la aplicación de consola (ver figura 2), usé agregar referencias de servicio en Visual Studio para generar las clases. Visual Studio tendrá acceso al servicio y generará las clases asociadas basándose en la definición de los datos de servicio y las agregará al proyecto. Después que las clases se hayan generado, seguiré desarrollando mi aplicación de la misma forma que lo haría con cualquier aplicación que consuma un servicio de OData, usando ya sea autenticación básica o servicios de recopilación de auditoría para hacer autenticación en el servicio. El ejemplo en la figura 2 establece una aplicación de consola simple usando autenticación básica.

Figura 2 Una simple aplicación de consola haciendo acceso a un servicio de datos e imprimiendo los 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();
    }
  }

Nota: Para ejecutar el código de muestra indicado en la figura 2*, necesitará registrarse como cliente de DataMarket y suscribirse a las ofertas de estadísticas criminales de Data.Gov. También notará que la URI usada en este ejemplo hace referencia a un lanzamiento preliminar a la versión del servicio que se producirá; podrá encontrar la URI correcta al iniciar sesión en DataMarket, yendo a Mis conjuntos de datos y al acceder a su suscripción a la oferta de estadísticas criminales de Data.gov.*

Para obtener más detalles acerca de escribir aplicaciones que consumen servicios de datos, consulte “Entity Framework 4.0 y WCF Data Services 4.0 en Visual Studio 2010” (msdn.microsoft.com/magazine/ee336128) y “Exponer y consumir datos en un mundo de servicios web” (msdn.microsoft.com/magazine/cc748663).

Vender datos en DataMarket

Muchas aplicaciones y sitios web populares generan, almacenan y consumen grandes cantidades de datos valiosos. Sin embargo, por lo general esos datos sólo se aprovechan dentro de la aplicación para los cuales se creó. Con la introducción de los servicios de datos de WCF y OData, teníamos una manera simple para los desarrolladores para exponer sus datos para un uso amplio, lo que ofrece una plataformas de servicio de datos y facilita que se usen tales datos, no solo en la aplicación para la cual se constituyeron en primer lugar, sino que en aplicaciones de terceros. Ahora, con DataMarket, existe una oportunidad muy simple para los desarrolladores no solo para exponer los datos a las aplicaciones que crean, sino que también para generar utilidades al vender los datos que necesitaban almacenar y mantener.

DataMarket se creó en Windows Azure y SQL Azure y permite a los editores crear bases de datos para datos que ellos hospeden en SQL Azure. Si mis datos ya están almacenados en SQL Azure, ya he avanzado un tramo en el camino de poder ofrecer datos para la venta en DataMarket. Para obtener más información acerca de cómo convertirse en un editor de DataMarket, revise blogs.msdn.com/b/dallas.

Elisa Flasko es administradora de programa del equipo de DataMarket de Windows Azure Marketplace en Microsoft. Puede ponerse en contacto con ella en blogs.msdn.com/elisaj.

Gracias a los siguientes expertos técnicos por su ayuda en la revisión de este artículo: Rene Bouw, Moe Khosravy y Adam Wilson