Формат полезных данных для операций службы таблиц
API REST службы таблиц поддерживает форматы полезных данных ATOM и JSON. Хотя протокол ATOM поддерживается для всех версий служб хранилища Azure, протокол JSON поддерживается только для версии 2013-08-15 и более поздних версий.
Json — это рекомендуемый формат полезных данных. JSON поддерживается для версии 2013-08-15 и более поздних версий. Необходимо использовать JSON с версией 2015-12-11 и более поздними версиями.
ATOM поддерживается для версий, предшествующих 11.12.2015.
Примечание
Следующие операции REST API не являются API OData и в настоящее время не поддерживают JSON: Get Table ACL, Set Table ACL, Get Table Service Properties и Set Table Service Properties.
Чтобы указать формат JSON или ATOM, укажите соответствующие значения для Content-Type
заголовков и Accept
(описано ниже). Обратите внимание на следующие ограничения.
Заголовок
Content-Type
требуется для всех запросов, содержащих полезные данные OData.Если заголовок
Accept
не указан, то тип содержимого в ответе будет иметь стандартное значениеapplication/atom+xml
.Если версия службы данных OData задается как 3.0, то указание параметра URI
$format
переопределяет значение, указанное в заголовке запросаAccept
. Дополнительные сведения о версии службы OData см. в разделе Настройка заголовков версии службы данных OData .
Чтобы выбрать формат полезных данных, нужно установить заголовки запроса Content-Type
и Accept
согласно нижеприведенной таблице.
Формат полезных данных | Заголовок Content-Type | Заголовок Accept | Версия службы данных (версия API REST) | Поддерживаемые API |
---|---|---|---|---|
Atom |
application/atom+xml |
application/atom+xml |
1.0 (любая версия) 2.0 (18.08.2011 или более поздняя версия) 3,0 (15.08.2013 или более поздняя) |
QueryTables CreateTable Удалить таблицу Query Entities (Сущности запроса) Вставка сущностей Вставка или слияние сущностей Вставка или замена сущности Update Entity (Обновление сущности) Merge Entity (Слияние сущностей) Delete Entity (Удаление сущности) |
JSON |
application/json |
application/json;odata=nometadata application/json;odata=minimalmetadata application/json;odata=fullmetadata Дополнительные сведения см. ниже в разделе Формат JSON. |
3,0 (15.08.2013 или более поздняя) | QueryTables CreateTable Удалить таблицу Query Entities (Сущности запроса) Вставка сущностей Вставка или слияние сущностей Вставка или замена сущности Update Entity (Обновление сущности) Merge Entity (Слияние сущностей) Delete Entity (Удаление сущности) |
XML |
application/xml |
application/xml |
Н/Д | Получение списка управления доступом для таблицы Задание списков управления доступом для таблиц Получение свойств службы таблиц Задание свойств службы таблиц |
Формат JSON (application/json) (версии 2013-08-15 и более поздние)
OData расширяет формат JSON, определяя общие соглашения для следующих пар имя-значение, подобно формату ATOM, описанному выше. OData определяет набор канонических заметок для контрольных сведений, таких как идентификаторы, тип и ссылки. Дополнительные сведения о формате JSON см. в разделе Знакомство с JSON.
Главное преимущество использования формата OData JSON заключается в том, что прогнозируемые части полезных данных можно пропустить для уменьшения размера полезных данных. Чтобы воспроизвести эти данные, в точке приема применяются выражения для вычисления недостающих ссылок, сведений о типе и контрольных сведений. Для управления пропуском данных в наборе применяются три уровня, которые можно указать в качестве части заголовка Accept
.
application/json;odata=nometadata
application/json;odata=minimalmetadata
application/json;odata=fullmetadata
Службой таблицы Azure поддерживаются следующие заметки ODATA.
odata.metadata
: URL-адрес метаданных для коллекции, сущности, значения примитива или сервисного документа.odata.id
: идентификатор сущности, который обычно является URL-адресом ресурса.odata.editlink
: ссылка, используемая для изменения или обновления записи, если сущность можно обновлять и идентификатор odata.id не представляет URL-адрес, который может использоваться для изменения сущности.odata.type
: имя типа вмещающего объекта.odata.etag
: ETag сущности.PropertyName@odata.type
, для пользовательских свойств: имя типа целевого свойства.PropertyName@odata.type
, для системных свойств (т. е.PrimaryKey
свойств ,RowKey
иTimestamp
): имя типа целевого свойства.
Сведения, включаемые в каждый уровень, приведены в следующей таблице.
Annotations |
odata=fullmetadata |
odata=minimalmetadata |
odata=nometadata |
---|---|---|---|
odata.metadata |
Да | Да | Нет |
odata.id |
Да | Нет | Нет |
odata.editlink |
Да | Нет | Нет |
odata.type |
Да | Нет | Нет |
odata.etag |
Да | Нет | Нет |
PropertyName@odata.type для пользовательских свойств |
Да | Да | Нет |
PropertyName@odata.type для системных свойств |
Да | Нет | Нет |
Типы свойств в канале JSON
Заметка odata.type
используется в формате OData JSON для определения типа открытого свойства. Эта заметка присутствует, когда выполняются все приведенные ниже условия.
Уровень управления JSON имеет значение
odata=minimalmetadata
илиodata=fullmetadata
, как описано в разделе Формат JSON.Свойство является пользовательским. Обратите внимание, что для таблиц Azure только свойства
PartitionKey
,RowKey
иTimestamp
являются системными и информация об их типе объявлена в$metadata
. Заметка типа для этих свойств присутствует, только если уровень управления имеет значениеodata=fullmetadata
. Дополнительные сведения см. в статье Общие сведения о модели данных службы таблиц.Тип свойства нельзя определить через эвристики обнаружения типа, приведенные в таблице ниже.
Тип Edm | требуется заметка odata.type | Тип JSON |
---|---|---|
Edm.Binary |
Да | Строка |
Edm.Boolean |
Нет | Литералы |
Edm.DateTime |
Да | Строка |
Edm.Double |
Нет | Числовой (содержит десятичную запятую) |
Edm.Guid |
Да | Строка |
Edm.Int32 |
Нет | Числовой (не содержит десятичную запятую) |
Edm.Int64 |
Да | Строка |
Edm.String |
нет | Строка |
Недоступно | Нет | NULL |
Служба таблиц не сохраняет null
значения для свойств. При записи сущности null
значение может быть указано с заметкой odata.type или без нее, а любое свойство со значением null
обрабатывается так, как если бы запрос не содержал этого свойства.
Null
значения свойств никогда не возвращаются при запросе сущностей.
Для Edm.Double значения NaN
, Infinity
и -Infinity
представляются в JSON с помощью типа String
, а заметка odata.type является обязательной. Служба таблиц не поддерживает отрицательную версию NaN
, а в формате JSON не различает положительный и отрицательный нуль (обрабатывается -0.0
как 0.0
).
Следующая сущность JSON содержит пример для каждого из восьми различных типов свойств.
{
"PartitionKey":"mypartitionkey",
"RowKey":"myrowkey",
"DateTimeProperty@odata.type":"Edm.DateTime",
"DateTimeProperty":"2013-08-02T17:37:43.9004348Z",
"BoolProperty":false,
"BinaryProperty@odata.type":"Edm.Binary",
"BinaryProperty":"AQIDBA==",
"DoubleProperty":1234.1234,
"GuidProperty@odata.type":"Edm.Guid",
"GuidProperty":"4185404a-5818-48c3-b9be-f217df0dba6f",
"Int32Property":1234,
"Int64Property@odata.type":"Edm.Int64",
"Int64Property":"123456789012",
"StringProperty":"test"
}
Поскольку PartitionKey
и RowKey
являются системными свойствами, это означает, что все строки таблицы должны определять эти свойства, а их заметки типа нет в сущности. Эти свойства стандартны как тип Edm.String
. Однако другие свойства являются настраиваемыми и поэтому содержат сведения о типах, соответствующие одному из поддерживаемых примитивных типов в приведенной выше таблице.
Примеры:
В следующем примере записи OData показан формат JSON, отправленный в виде запроса на вставку сущности в хранилище таблиц Azure (дополнительные сведения об операции вставки см. в разделе Вставка сущности ):
{
"Address":"Mountain View",
"Age":23,
"AmountDue":200.23,
"CustomerCode@odata.type":"Edm.Guid",
"CustomerCode":"c9da6455-213d-42c9-9a79-3e9149a57833",
"CustomerSince@odata.type":"Edm.DateTime",
"CustomerSince":"2008-07-10T00:00:00",
"IsActive":true,
"NumOfOrders@odata.type":"Edm.Int64",
"NumOfOrders":"255",
"PartitionKey":"mypartitionkey",
"RowKey":"myrowkey1",
}
Когда клиент запрашивает набор сущностей в хранилище таблиц Azure, служба отвечает полезными данными JSON (дополнительные сведения об операции запроса см. в разделе Сущности запроса). Веб-канал может включать один из трех уровней информации: без метаданных, минимальные метаданные или полные метаданные. В следующих примерах демонстрируется каждый уровень:
Метаданные отсутствуют:
{
"value":[
{
"PartitionKey":"Customer03",
"RowKey":"Name",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Минимальные метаданные:
{
"odata.metadata":"https://myaccount.table.core.windows.net/$metadata#Customers,
"value":[
{
"PartitionKey":"Customer03",
"RowKey":"Name",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince@odata.type":"Edm.DateTime",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Полные метаданные:
{
"odata.metadata":"https://myaccount.table.core.windows.net/$metadata#Customers",
"value":[
{
"odata.type":"myaccount.Customers",
"odata.id":"https://myaccount.table.core.windows.net/Customers(PartitionKey='Customer03',RowKey='Name')",
"odata.etag":"W/\"0x5B168C7B6E589D2\"",
"odata.editLink":"Customers(PartitionKey='Customer03',RowKey='Name')",
"PartitionKey":"Customer03,
"RowKey":"Name",
"Timestamp@odata.type":"Edm.DateTime",
"Timestamp":"2013-08-09T18:55:48.3402073Z",
"CustomerSince@odata.type":"Edm.DateTime",
"CustomerSince":"2008-10-01T15:25:05.2852025Z",
}
}
Дополнительные сведения о формате OData JSON см. в спецификации формата OData JSON версии 4.0 в сочетании с документом [MS-ODATAJSON]: поддержка стандартов формата JSON протокола OData.
Формат Atom (application/atom+xml) (только версии, предшествующие 11.12.2015)
Atom — это формат документов на основе XML, описывающий коллекции связанных сведений, называемых веб-каналами. Каналы состоят из нескольких элементов или записей. AtomPub определяет дополнительные конструкции формата для записей и веб-каналов, чтобы ресурсы, которые они представляли, можно было легко классифицировать, группировать, редактировать и обнаруживать. Однако, поскольку Atom не определяет, как структурированные данные кодируются с помощью веб-каналов, OData определяет набор соглашений для представления структурированных данных в веб-канале Atom, чтобы обеспечить передачу структурированного содержимого службами на основе OData.
Например, следующий пример записи OData демонстрирует формат Atom, отправленный через запрос на вставку сущности в хранилище таблиц Azure с помощью REST API (дополнительные сведения об операции вставки см. в разделе Вставка сущности ):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">
<title />
<author>
<name />
</author>
<id />
<content type="application/xml">
<m:properties>
<d:Address>Mountain View</d:Address>
<d:Age m:type="Edm.Int32">23</d:Age>
<d:AmountDue m:type="Edm.Double">200.23</d:AmountDue>
<d:BinaryData m:type="Edm.Binary" m:null="true" />
<d:CustomerCode m:type="Edm.Guid">c9da6455-213d-42c9-9a79-3e9149a57833</d:CustomerCode>
<d:CustomerSince m:type="Edm.DateTime">2008-07-10T00:00:00</d:CustomerSince>
<d:IsActive m:type="Edm.Boolean">true</d:IsActive>
<d:NumOfOrders m:type="Edm.Int64">255</d:NumOfOrders>
<d:PartitionKey>mypartitionkey</d:PartitionKey>
<d:RowKey>myrowkey1</d:RowKey>
</m:properties>
</content>
</entry>
Когда клиент запрашивает набор сущностей в хранилище таблиц, служба отвечает веб-каналом Atom, который представляет собой коллекцию записей Atom (дополнительные сведения об операции запроса см. в разделе Сущности запроса ):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://myaccount.table.core.windows.net/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">
<title type="text">Customers</title>
<id>https://myaccount.table.core.windows.net/Customers</id>
<link rel="self" title="Customers" href="Customers" />
<entry m:etag="W/"0x5B168C7B6E589D2"">
<id>https://myaccount.table.core.windows.net/Customers(PartitionKey='Customer03',RowKey='Name')</id>
<title type="text"></title>
<updated>2008-10-01T15:26:13Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Customers" href="Customers (PartitionKey='Customer03',RowKey='Name')" />
<category term="myaccount.Customers" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:PartitionKey>Customer03</d:PartitionKey>
<d:RowKey>Name</d:RowKey> <d:CustomerSince m:type="Edm.DateTime">2008-10-01T15:25:05.2852025Z</d:CustomerSince>
</m:properties>
</content>
</entry>
</feed>
Типы свойств в веб-канале Atom
Типы данных свойств определяются спецификацией протокола OData. Не все типы данных, определенные в спецификации, поддерживаются службой таблиц. Сведения о поддерживаемых типах данных и их сопоставлении с типами СРЕДЫ CLR см. в разделе Основные сведения о модели данных службы таблиц.
Свойство может указываться с точным типом данных или без него. Если тип не указан, свойство автоматически создается с типом данных Edm.String
.
Если свойство создается с явным типом, то запрос, который возвращает сущность, включает этот тип в веб-канал Atom, так что при необходимости можно определить тип существующего свойства. Знание типа свойства важно при создании запроса, производящего фильтрацию по этому свойству. Дополнительные сведения см. в разделе Запросы к таблицам и сущностям.
Для Double
свойств значения NaN
, INF
и -INF
используются в Atom для обозначения не числа, положительной бесконечности и отрицательной бесконечности соответственно. Формы Infinity
и -Infinity
также принимаются. Служба таблиц не поддерживает отрицательную версию NaN
. В формате Atom он различает положительный и отрицательный нуль.
См. также:
Установка заголовков версий данных службы OData
Управление версиями для служб хранилища Azure
Основные понятия службы таблиц