Доступ к службе OData (WCF Data Services)

Службы Службы WCF Data Services поддерживают Протокол Open Data Protocol (OData) для предоставления данных в виде канала с ресурсами, доступными через URI. Эти ресурсы представлены в рамках соглашений о связях сущностей Entity Data Model. Сущности в этой модели представляют операционные единицы данных, которые являются типами данных в домене приложения, такими как клиенты, заказы, элементы и продукты. Это позволяет обращаться к данным сущности и изменять их с использованием семантики REST, в частности стандартных команд HTTP, таких как GET, PUT, POST и DELETE.

Адресация ресурсов

В службах OData обращение к данным, предоставленным моделью данных, осуществляется с использованием URI. Например, следующий URI возвращает канал набора сущностей Customers, содержащий записи для всех экземпляров типа сущности Customer:

http://services.odata.org/Northwind/Northwind.svc/Customers

Сущности имеют специальные свойства, называемые ключами сущностей. Ключ сущности используется для уникальной идентификации одной сущности в наборе сущностей. Это позволяет адресовать конкретный экземпляр типа сущности в наборе сущностей. Например, следующий URI возвращает запись для определенного экземпляра типа сущности Customer, имеющего значение ключа ALFKI:

http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')

К свойствам примитивного типа и сложным свойствам экземпляра сущности можно обращаться по отдельности. Например, следующий URI возвращает XML-элемент, содержащий значение свойства ContactName для конкретной сущности Customer:

http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/ContactName

При включении конечной точки $value в предыдущий URI в ответном сообщении возвращается только значение свойства примитивного типа. В следующем примере возвращается только строка «Maria Anders» без XML-элемента:

http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/ContactName/$value

Связи между сущностями определяются в модели данных с помощью ассоциаций. Эти ассоциации позволяют адресовать набор связанных сущностей с помощью свойств навигации экземпляра сущности. Свойство навигации возвращает либо одну связанную сущность в случае связи «многие к одному», либо набор связанных сущностей в случае связи «один ко многим». Например, следующий URI возвращает канал, который представляет набор всех заказов, связанных с конкретной сущностью Customer:

http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders

Связи, которые обычно являются двунаправленными, представлены парой свойств навигации. В отличие от связей, описанных в предыдущем примере, следующий URI возвращает ссылку на сущность Customer, к которой принадлежит определенная сущность Order:

http://services.odata.org/Northwind/Northwind.svc/Orders(10643)/Customer

Службы OData позволяют также адресовать ресурсы на основе результатов выражений запросов. Это позволяет фильтровать наборы ресурсов на основе вычисленных выражений. Например, следующий URI фильтрует для возврата только заказы конкретного клиента, доставленные с 22 сентября 1997 г.

http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders?$filter=ShippedDate gt datetime'1997-09-22T00:00:00'

Дополнительные сведения см. в разделе OData: соглашения URI.

Системные параметры запросов

Службы OData определяют набор системных параметров запросов, которые можно использовать для выполнения традиционных операций с запросами к ресурсам, таких как фильтрация, сортировка и подкачка страниц. Например, следующий URI возвращает набор всех сущностей Order совместно со связанными сущностями Order_Detail, почтовые индексы которых не заканчиваются на 100:

http://services.odata.org/Northwind/Northwind.svc/Orders?$filter=not endswith(ShipPostalCode,'100')&$expand=Order_Details&$orderby=ShipCity

Записи в возвращаемом канале упорядочены по значению свойства заказов ShipCity.

Службы Службы WCF Data Services поддерживают следующие системные параметры запросов OData.

Параметр запроса

Описание

$orderby

Определяет порядок сортировки по умолчанию для сущностей в возвращенном канале. Следующий запрос упорядочивает возвращаемый канал Customers по странам и городам:

http://services.odata.org/Northwind/Northwind.svc/Customers?$orderby=Country,City

Дополнительные сведения см. в разделе OData: параметр системного запроса OrderBy ($orderby).

$top

Указывает количество сущностей, которые необходимо включить в возвращаемый канал. В следующем примере пропускаются первые 10 клиентов и возвращаются следующие 10:

http://services.odata.org/Northwind/Northwind.svc/Customers?$skip=10&$top=10

Дополнительные сведения см. в разделе OData: Системный параметр запроса начальных элементов ($top).

$skip

Указывает количество сущностей, которые необходимо пропустить перед возвратом сущностей в канал. В следующем примере пропускаются первые 10 клиентов и возвращаются следующие 10:

http://services.odata.org/Northwind/Northwind.svc/Customers?$skip=10&$top=10

Дополнительные сведения см. в разделе OData: Системный параметр пропуска запроса ($skip).

$filter

Определяет выражение, фильтрующее сущности, которые возвращаются в канал на основе определенного критерия. Этот параметр запроса поддерживает набор операторов логического сравнения, арифметических операторов и заранее заданных функций запроса, которые используются для оценки критерия фильтра. В следующем примере возвращаются все заказы, почтовые коды которых не оканчиваются на 100:

http://services.odata.org/Northwind/Northwind.svc/Orders?$filter=not endswith(ShipPostalCode,'100')

Дополнительные сведения см. в разделе OData: Системный параметр запроса фильтрации ($filter).

$expand

Указываются связанные сущности, возвращаемые запросом. Связанные сущности включаются либо в качестве канала, либо в качестве записи, встроенной в сущность, возвращаемую запросом. В следующем примере возвращается заказ для клиента «ALFKI» вместе со сведениями по всем заказам:

http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders?$expand=Order_Details

Дополнительные сведения см. в разделе OData: Системный параметр запроса развертывания ($expand).

$select

Указывает проекцию, определяющую свойства сущности, возвращаемые в проекции. По умолчанию в канале возвращаются все свойства сущности. В следующем запросе возвращается только три свойства сущности Customer:

http://services.odata.org/Northwind/Northwind.svc/Customers?$select=CustomerID,CompanyName,City

Дополнительные сведения см. в разделе OData: Системный параметр запроса выбора ($select).

$inlinecount

Запрашивает включение в поток количества сущностей, возвращаемых в канале. Дополнительные сведения см. в разделе OData: параметр системного запроса Inlinecount ($inlinecount).

Адресация связей

Помимо обращения к наборам и экземплярам сущностей, OData также позволяет получить доступ к ассоциациям, представляющим связи между сущностями. Эта функциональность необходима для создания или изменения связей между двумя экземплярами сущностей, таких как поставщик, связанный с данным заказом в образце базы данных Northwind. Службы OData поддерживают оператор $link, позволяющий адресовать сопоставления между сущностями. Например, следующий URI задан в сообщении запроса HTTP PUT для изменения поставщика конкретного заказа на нового.

http://services.odata.org/Northwind/Northwind.svc/Orders(10643)/$links/Shipper

Дополнительные сведения см. в разделе OData: Обращение к ссылкам между сущностями.

Использование возвращаемого канала

URI ресурса служб OData позволяет адресовать данные сущности, предоставляемые службой. При вводе URI в поле адреса веб-браузера возвращается представление запрошенного ресурса в виде канала OData. Дополнительные сведения см. в разделе Краткое руководство по службам данных WCF. Хотя с помощью веб-браузера можно проверить, возвращает ли источник службы данных нужные данные, доступ к производственным службам данных, которые также создают, обновляют и удаляют данные, обычно осуществляется с помощью кода приложения или языков скриптов на веб-странице. Дополнительные сведения см. в разделе Использование службы OData в клиентском приложении (WCF Data Services).

См. также

Другие ресурсы

Веб-узел протокола Open Data Protocol