Windows Azure Marketplace DataMarket, впервые объявленный как проект Microsoft под кодовым названием «Dallas» на конференции PDC09, изменяет способ обмена информацией, предлагая самый разнообразный контент от авторитетных коммерческих и общедоступных источников на единой рыночной площадке. Это упрощает поиск и покупку данных, необходимых для ваших приложений и аналитиков.
Если бы я разрабатывала приложение для выбора маршрутов и планирования остановок в процессе поездки, мне понадобился бы огромный объем данных из самых разнообразных источников. Это приложение могло бы сначала предлагать пользователю указать конечную точку маршрута и любые остановки, которые он хотел бы сделать по дороге. Потом оно могло бы получать текущие координаты от GPS или просить пользователя задать начальное местонахождение, а затем на основе этой информации проложить наилучший маршрут для данной поездки. Далее оно могло бы связываться с Facebook, определять, кто из друзей пользователя живет в тех местах, и спрашивать, не желаю ли я посетить кого-нибудь из них. Заодно оно могло бы получать прогнозы погоды для городов, выбранных в качестве остановок, а также определять достопримечательности, заправки и рестораны как потенциальные остановки на пути.
До появления DataMarket я была бы вынуждена сначала найти источники всех разнотипных данных, необходимых моему приложению. Для этого пришлось бы посещать веб-сайты множества компаний и определять, есть ли у них нужные мне данные, предлагают ли они их на продажу пакетом и устроит ли меня их цена. Потом мне понадобилось бы покупать данные непосредственно у каждой компании. Например, я могла бы отправиться прямо в компанию вроде Infogroup и купить информацию, позволяющую находить вдоль маршрута заправки, рестораны и объекты, представляющие интерес для туристов; затем в компанию наподобие NavTeq для получения отчетов о текущей интенсивной движения на дорогах; наконец, в такую компанию, как Weather Central, чтобы получать прогнозы погоды. Весьма вероятно, что формат данных, предоставляемых каждой из этих компаний, окажется собственным, вдобавок некоторые пришлют информацию на DVD-диске, другие — через веб-сервис, таблицу Excel и т. д.
Сегодня благодаря DataMarket создание этого приложения становится гораздо проще. DataMarket предоставляет единое место — рыночную площадку для продажи/покупки данных, — где я могу искать, анализировать, опробовать и покупать данные, нужные мне для разработки своего приложения. Он также предоставляет мне данные через единый интерфейс в стандартном формате OData (подробнее о OData см. сайт OData.org). Обеспечивая доступ к данным по протоколу OData, DataMarket гарантирует, что я смогу обращаться к ним с любой платформе (как минимум, мне нужен стек HTTP) и из любого приложения, поддерживающего OData, в том числе из таких приложений, как Microsoft PowerPivot for Excel 2010, которые изначально поддерживают OData.
DataMarket создает единую рыночную площадку для провайдеров различного контента, чтобы сделать их данные доступными для продажи с использованием различных пакетов предложений (каждый из пакетов позволяет предлагать разные подмножества или представления доступных данных или делать данные доступными на разных условиях использования). Провайдеры контента определяют детали своих предложений, в том числе условия использования, модель ценообразования (в версии 1 предложения делаются доступными на основе ежемесячной подписки) и стоимость.
Приступаем к работе с DataMarket
Для начала я регистрируюсь в DataMarket, используя свой Windows Live ID и вхожу на сайт. Отсюда можно вести поиск в наборах данных, имеющихся в настоящее время на сайте, просматривать детальную информацию о каждом из них (описание, оплата, визуализации, условия использования и др.), чтобы определить, какой издатель поставляет нужный тип данных и кто из них предлагает наилучшие условия для конкретных потребностей.
Хотя мне нужно найти набор данных, отвечающий техническим требованиям моего приложения, не менее важно проверить установленные издателем условия использования на предмет того, позволяют ли они использовать данные так, как это необходимо приложению. Условия использования могут широко варьироваться для разных наборов данных и издателей. Эти условия можно прочитать в подробной информации, сопровождающей каждое предложение.
Порывшись какое-то время, я обнаружила, что для моего приложения мог бы быть интересен сервис Infogroup Business Database. После просмотра доступных визуализаций данных (примеры данных в табличном формате или в некоторых случаях примеры их отображения на карте или диаграмме) я сочла, что он обеспечит меня необходимой информацией, в том числе об отелях, ресторанах и заправках на выбираемых маршрутах, и что он отвечает моим требованиям. Решив, какие наборы данных соответствуют моим потребностям, я могу приобрести ежемесячную подписку на этот сервис, которая разрешает выдавать неограниченное количество запросов каждый месяц, и оплатить покупку кредитной картой. После совершения любой покупки я получаю право на управление своей учетной записью и просмотр текущих подписок в разделе Account в Marketplace. Раздел Account можно также использовать для создания и управления ключами учетной записи и с их помощью обращаться к своим подпискам. Подобный ключ обязательно понадобится при доступе к данным из такого приложения, как PowerPivot. Аналогично, когда вы разрабатываете приложение, его аутентификация осуществляется именно по ключу учетной записи.
После покупки предложения DataMarket делает доступным Service Explorer (рис. 1), который позволяет исследовать набор данных, создавая запросы и осуществляя предварительный просмотр результатов, что в конечном счете дает возможность лучше разобраться в данных и их схеме, доступных в каждом наборе данных.
Рис. 1. DataMarket Service Explorer
Если открыть сервис Infogroup Business Database в Service Explorer, можно создавать запросы с фильтрацией по городу, штату и почтовому индексу, чтобы находить интересующие вас места вдоль проложенного маршрута. Например, если я укажу в качестве города Seattle (Сиэтл), штата — WA (Вашингтон) и щелкну Execute query, то получу предварительное представление, содержащее первые 100 результатов от сервиса. Из него видно, что в Сиэтле есть отель Westin, который стоит включить в список остановок, используемый приложением. По умолчанию при нажатии Preview результаты показываются в правой части Service Explorer в базовом табличном формате, более простом для восприятия. Но возможен предварительный просмотр и в формате OData Atom, который я буду использовать в своем приложении, или в изначальном формате, предоставляемом Infogroup.
Если бы я не была разработчиком или если бы мне нужно было бы просто извлекать эти данные в существующую программу, распознающую формат OData (например, PowerPivot for Excel 2010), то и это можно было бы сделать прямо в DataMarket, войдя в него, открыв список своих текущих подписок и щелкнув нужное предложение данных. В таком случае у меня появилась бы возможность открывать это предложение данных в любом выбранном мной приложении. (Подробнее об использовании DataMarket совместно с PowerPivot см. в блоге группы DataMarket blogs.msdn.com/b/dallas.)
Использование OData
Доводилось ли вам создавать приложение, использующее данные от OData-сервиса? Если да, считайте, что вы уже почти знаете, как использовать данные от DataMarket в своем приложении, потому что большинство сервисов в DataMarket предоставляются по протоколу OData. Я вкратце изложу основы работы с OData.
Начинаете вы с существующего приложения и просто добавляете новые средства, использующие данные от DataMarket, или создаете новое приложение с нуля, первый шаг в получении данных от сервиса в DataMarket — определение классов, представляющих данные в приложении. Для этого можно написать собственные классы Plain Old C# Object (POCO) или задействовать мастер Add Service Reference в Visual Studio для генерации необходимых классов.
Как уже упоминалось, издатель (владелец данных) указывает, как предоставляется информация из каждого набора данных, а условия использования диктуют то, как можно применять эти данные после покупки. В условия включается, может ли пользователь (и если может, то как) создавать собственные запросы к набору данных, какие поля можно запрашивать для получения данных и какие поля возвращаются. В некоторых случаях издатель может указать, что пользователи не имеют права создавать собственные запросы и должны применять фиксированные веб-методы для запроса данных от сервиса. Как разработчик, прежде чем начинать писать приложения, я должна изучить документ Atom Service из конкретного предложения, чтобы выяснить, доступны ли по запросу какие-либо наборы сущностей. Для этого можно указать браузеру корневой URI предложения. Если в документе сервиса нет никаких наборов (collections), значит, в предложении не предусматривается доступность наборов сущностей по запросам и потребуется обращаться к набору данных через фиксированные веб-методы. Для примера посмотрим документы Atom Service для двух разных наборов данных, один из которых предоставляет EntitySet по запросу (Data.Gov Crime Data), а другой вообще не принимает запросы (AP Data). Заметьте, что в следующих примерах кода в предложении AP нет узлов <collection> (представляющих доступные наборы сущностей) в документе сервиса.
Вот документ Atom Service для предложения Data.gov Crime Data, в котором запросу предоставляются наборы сущностей. В данном предложении доступен один набор сущностей — 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>
А это документ Atom Service для предложения AP, где собственные запросы запрещены:
<?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>
Если используемых мной набор данных предоставляет наборы сущностей для запроса, я могу задействовать мастер Add Service Reference в Visual Studio — точно так же, как это делается для WCF-сервиса. Я просто щелкаю проект правой кнопкой мыши и выбираю команду Add Service Reference. В одноименном диалоговом окне я ввожу URI для входной точки сервиса (его можно получить на странице Service Explorer в DataMarket) как Address, а затем щелкаю OK.
Если же набор данных не разрешает формировать собственные специфические запросы, я не могу воспользоваться мастером Add Service Reference. В таком случае придется писать свои POCO-классы, представляющие сущности (или объекты), возвращаемые фиксированными веб-методами. DataMarket использует базовую аутентификацию (Basic Authentication) с передачей Windows Live ID в качестве имени пользователя и сопоставленного с ним ключа учетной записи в DataMarket в поле пароля. Для примера консольного приложения (рис. 2) я использовала Add Service Reference в Visual Studio, чтобы сгенерировать нужные классы. Visual Studio обращается к сервису и генерирует соответствующие классы на основе определения сервиса данных, а затем добавляет их в проект. После этого можно продолжать разработку приложения так же, как и любого другого приложения, использующего OData-сервис, и задействовать либо базовую аутентификацию, либо аутентифицироваться в сервисе через Audit Collection Services. Пример на рис. 2 настроен на базовую аутентификацию.
Рис. 2. Простое консольное приложение для доступа к сервису данных и вывода результатов
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();
}
}
Примечание: чтобы запустить пример кода с рис. 2, нужно зарегистрироваться в качестве клиента DataMarket и подписаться на предложение Data.Gov Crime Statistics. Также обратите внимание, что URI, используемый в этом примере, ссылается на предварительную версию сервиса; правильный URI можно найти, войдя в DataMarket, открыв My Datasets и обратившись к своей подписке на предложение Data.gov Crime Statistics.
Подробнее о написании приложений, использующих сервисы данных, см. статьи «Entity Framework 4.0 and WCF Data Services 4.0 in Visual Studio 2010» (msdn.microsoft.com/magazine/ee336128) и «Expose and Consume Data in a Web Services World» (msdn.microsoft.com/magazine/cc748663).
Продажа данных в DataMarket
Многие популярные приложения и веб-сайты генерируют, хранят и используют огромные объемы ценных данных. Но обычно эти данные используются лишь в пределах того приложения, для которого они создавались. С появлением WCF Data Services и OData мы получили простой способ предоставлять свои данные для более широкого применения, предлагающий платформу сервисов данных и упрощающий использование этих данных не только в первоначальном приложении, но и в программных продуктах других разработчиков. Теперь с помощью DataMarket у разработчиков есть возможность не только предоставлять данные для написанных ими приложений, но и получать деньги за эти данные.
DataMarket опирается на Windows Azure и SQL Azure и позволяет издателям создавать наборы данных для той информации, которую они хотят разместить в SQL Azure. Если мои данные уже хранятся в SQL Azure, я смогу предлагать их на продажу в DataMarket. Чтобы узнать больше о том, как стать издателем в DataMarket, читайте блогblogs.msdn.com/b/dallas.