Open Data Protocol (OData) — один из новых HTTP-протоколов для обновления и запроса данных. Это простой протокол, использующий другие протоколы, такие как HTTP , ATOM и JSON . Одним из сайтов, который позволяет использовать свои данные по протоколу OData, является Twitpic — сервис изображений для Twitter . В этой публикации я покажу вам, как создать простой клиент Twitpic с использованием ASP.NET .
Исходный код
Вы можете найти исходный код этого примера в репозитории экспериментов Visual Studio 2010 на GitHub.
Репозиторий исходного кода GitHub |
Простой редактор изображений принадлежит решению Experiment.OData , имя проекта — Experiment.OData.TwitPicClient .
Образец заявки
Мой пример приложения прост. У него есть несколько имен пользователей, которые пользователь может выбрать. Существует также текстовое поле для фильтрации изображений. Если пользователь вставляет что-то в текстовое поле, то строка, вставленная в текстовое поле, ищется в части сообщения на рисунках. Результаты показаны как на следующем скриншоте.
Нажмите на изображение, чтобы увидеть его в оригинальном размере.
Максимальное количество изображений, возвращаемых одним запросом, ограничено десятью. Вы можете изменить лимит или удалить его. Слышно просто показать вам, как можно выполнять запросы.
Опрос Twitpic
Я написал это приложение для Visual Studio 2010. Чтобы получить там данные Twitpic, я ничего особенного не сделал — просто добавил ссылку на службу Twitpic OData, которая находится по адресу http://odata.twitpic.com/ . Visual Studio понимает формат и генерирует все классы для вас, чтобы вы могли сразу начать использовать сервис.
Теперь давайте посмотрим, как запросить службу OData. Это метод Page_Load моей страницы по умолчанию. Обратите внимание, как я построил пошаговый запрос LINQ здесь
protected override void OnLoad(EventArgs e)
{
var uri = new Uri("http://odata.twitpic.com/");
var user = Request.QueryString["user"];
if (string.IsNullOrWhiteSpace(user))
{
user = "gpeipman";
}
var client = new TwitpicData.TwitpicData(uri);
client.IgnoreMissingProperties = false;
client.IgnoreResourceNotFoundException = false;
var images = from u in client.Users
from i in u.Images
where u.UserName == user
select i;
if (!string.IsNullOrWhiteSpace(filterField.Text))
{
var searchString = filterField.Text.ToLower();
images = from i in images
where i.Message.ToLower().Contains(searchString)
select i;
}
images = images.OrderByDescending(i => i.Timestamp);
picsByLabel.Text = user;
imagesRepeater.DataSource = images.Take(10);
imagesRepeater.DataBind();
}
Мой запрос состоит из следующих шагов:
- создать запрос, объединяющий пользователя и изображения, и добавить условие для имени пользователя,
- если текстовое поле поиска было заполнено, добавьте условие поиска к запросу,
- сортировать данные по отметке времени в порядке убывания,
- сделать запрос, чтобы вернуть только первые десять результатов.
Теперь давайте посмотрим на запрос OData, который отправляется в службу Twitpic OData. Вы можете нажать на изображение, чтобы увидеть его в оригинальном размере.
Нажмите на изображение, чтобы увидеть его в оригинальном размере.
Это запрос, который наш сервисный клиент отправил в сервис OData (я искал белград по моим фотографиям):
/ Users ( ‘gpeipman’) / Изображения ()? $ = фильтр substringof ( ‘белград’, ToLower (Message)) & $ OrderBy = Отметка% 20desc & $ топ = 10
Если вы посмотрите на строку запроса, то увидите, что все условия, которые я установил через LINQ, представлены в этом URL. URL не очень короткий, но имеет простой синтаксис и легко читается. Ответом на наш запрос является чистый XML, который отображается на нашу объектную модель при получении ответа. Там нет ничего сложного, как вы можете видеть.
Вывод
Работать с нашим клиентом Twitpic было чрезвычайно просто. Мы не сделали ничего особенного — просто добавили ссылку на сервис и написали один простой запрос LINQ, который мы дали ретранслятору, который показывает данные. Как мы увидели из мониторинга отчета прокси-сервера, тогда ответ немного грязный, но все же простой XML, который мы можем прочитать, используя некоторую библиотеку XML, если у нас нет лучшего варианта. Вы можете найти больше услуг OData на странице производителей OData .