Экспорт (0) Печать
Развернуть все
Эта тема еще не получила оценку - Оценить эту тему

Вставка или слияние сущностей (REST API)

Обновлено: Февраль 2014 г.

Операция Insert Or Merge Entity обновляет существующую сущность или вставляет новую сущность, если ее нет в таблице. Так как эта операция может вставлять и обновлять сущность, ее также называют операцией вставки-обновления.

Запрос Insert Or Merge Entity можно составить следующим образом. Рекомендуется использовать протокол HTTPS. Замените следующие значения собственными:

  • myaccount — именем учетной записи службы.

  • mytable — именем таблицы.

  • myPartitionKey и myRowKey — именем ключа секции и ключа строки для обновляемой сущности.

 

Метод URI запроса Версия HTTP

MERGE

https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey'

HTTP/1.1

При построении запроса к эмулированной службе хранилища укажите имя узла эмулятора и порт службы таблиц в виде 127.0.0.1:10002, затем укажите имя эмулированной учетной записи хранилища.

 

Метод URI запроса Версия HTTP

MERGE

http://127.0.0.1:10002/devstoreaccount1/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey')

HTTP/1.1

Служба таблиц в эмуляторе хранилища отличается от службы таблиц Windows® Azure™ в нескольких аспектах. Дополнительные сведения см. в разделе Различия между эмулятором хранилища и службами хранилища Windows Azure.

Отсутствуют.

В следующей таблице перечислены обязательные и необязательные заголовки запросов.

 

Заголовок запроса Описание

Authorization

Обязательный. Указывает схему проверки подлинности, имя учетной записи и подпись. Дополнительные сведения см. в разделе Проверка подлинности для служб хранения Windows Azure.

Date или x-ms-date

Обязательный. Задает время в формате UTC для запроса. Дополнительные сведения см. в разделе Проверка подлинности для служб хранения Windows Azure.

x-ms-version

Обязательный. Должен иметь значение 2011-08-18 или последующей версии. Задает версию операции, используемой для этого запроса. Дополнительные сведения см. в разделе Управление версиями для служб больших двоичных объектов, очередей и таблиц в Windows Azure.

Content-Type

Обязательный. Указывает тип содержимого в полезных данных. Возможными значениями являются application/atom+xml и application/json.

Дополнительные сведения о допустимых типах содержимого см. в разделе Формат полезных данных для операций службы таблиц.

Content-Length

Обязательный. Длина текста запроса.

x-ms-client-request-id

Необязательно. Предоставляет сформированное клиентом непрозрачное значение с ограничением в 1 КБ, которое записывается в журналы аналитики, когда включено ведение журналов аналитики хранилища. Этот заголовок настоятельно рекомендуется использовать для соотнесения действий, выполняемых на стороне клиента, с запросами, получаемыми сервером. Дополнительные сведения см. в разделах About Storage Analytics Logging и Ведение журналов в Windows Azure: использование журналов для отслеживания запросов к хранилищу.

Операция Insert Or Merge Entity отправляет вставляемую сущность в виде набора сущностей OData, который представляет собой полезные данные JSON или Atom. Дополнительные сведения см. в разделе Вставка и обновление сущностей.

Ответ включает код статуса HTTP и набор заголовков ответа.

Успешная операция возвращает код состояния 204 (No Content).

Дополнительные сведения о кодах состояния см. в разделах Status and Error Codes и Коды ошибок для службы таблиц.

Ответ содержит следующие заголовки. Ответ может также включать дополнительные стандартные заголовки HTTP. Все стандартные заголовки соответствуют Спецификации протокола HTTP/1.1.

 

Заголовок ответа Описание

ETag

ETag сущности.

x-ms-request-id

Этот заголовок однозначно определяет выполненный запрос, его также можно использовать для устранения связанных с запросом неполадок. Дополнительные сведения см. в разделе Troubleshooting API Operations.

x-ms-version

Указывает версию службы таблиц, используемую для выполнения запроса. Этот заголовок возвращается для запросов к версии 2009-09-19 и более поздним версиям.

Date

Значение даты и времени в формате UTC, сформированное службой и указывающее время, когда был инициирован ответ.

Отсутствуют.

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

Atom: Ниже приведен пример запроса и ответа Atom.

MERGE https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey',RowKey='myRowKey')

Запрос отправляется со следующими заголовками:

x-ms-version: 2013-08-15
Accept: application/atom+xml,application/xml
Accept-Charset: UTF-8
Content-Type: application/atom+xml
x-ms-date: Tue, 12 Nov 2013 18:10:24 GMT
Authorization: SharedKeyLite myaccount:u0sWZKmjBD1B7LY/CwXWCnHdqK4B1P4z8hKy9SVW49o=
Content-Length: 1135
DataServiceVersion: 1.0;NetFx
MaxDataServiceVersion: 2.0;NetFx

Запрос отправляется со следующим текстом XML:

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title />
  <updated>2013-11-12T18:09:37.168836Z</updated>
  <author>
    <name />
  </author>
<id>https://myaccount.table.core.windows.net/mytable(PartitionKey='mypartitionkey',RowKey='myrowkey')</id>
  <content type="application/xml">
    <m:properties>
      <d:Address>Santa Clara</d:Address>
      <d:Age m:type="Edm.Int32">23</d:Age>
      <d:AmountDue m:type="Edm.Double">200.23</d:AmountDue>
      <d:CustomerCode m:type="Edm.Guid">c9da6455-213d-42c9-9a79-3e9149a57833</d:CustomerCode>
      <d:CustomerSince m:type="Edm.DateTime">2008-07-10T00:00:00Z</d:CustomerSince>
      <d:IsActive m:type="Edm.Boolean">false</d:IsActive>
      <d:NumOfOrders m:type="Edm.Int64">255</d:NumOfOrders>
      <d:PartitionKey>mypartitionkey</d:PartitionKey>
      <d:RowKey>myrowkey1</d:RowKey>
      <d:Timestamp m:type="Edm.DateTime">2013-11-12T18:09:37.9557508Z</d:Timestamp>
    </m:properties>
  </content>
</entry>

После отправки запроса возвращается следующий ответ:

HTTP/1.1 204 No Content

Connection: Keep-Alive
x-ms-request-id: 2c085f8f-11a4-4e1d-bd49-82c6bd87649d
Content-Length: 0
Cache-Control: no-cache
Date: Tue, 12 Nov 2013 18:12:54 GMT
ETag: W/"0x5B168C7B6E589D2"
DataServiceVersion: 1.0;NetFx
MaxDataServiceVersion: 2.0;NetFx
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0

JSON: Ниже приведен пример запроса и ответа JSON.

MERGE https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey',RowKey='myRowKey')

Запрос отправляется со следующими заголовками:

x-ms-version: 2013-08-15
Content-Type: application/json
x-ms-date: Tue, 30 Aug 2013 18:10:24 GMT
Authorization: SharedKeyLite myaccount:u0sWZKmjBD1B7LY/CwXWCnHdqK4B1P4z8hKy9SVW49o=
Content-Length: 1135
DataServiceVersion: 3.0;NetFx
MaxDataServiceVersion: 3.0;NetFx

Запрос отправляется со следующим текстом JSON:

{
   "Address":"Santa Clara",
   "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":false,
   "NumberOfOrders@odata.type":"Edm.Int64",
   "NumberOfOrders":"255",
   "PartitionKey":"mypartitionkey",
   "RowKey":"myrowkey"
}

После отправки запроса возвращается следующий ответ:


HTTP/1.1 204 No Content

Connection: Keep-Alive
x-ms-request-id: 2c085f8f-11a4-4e1d-bd49-82c6bd87649d
Content-Length: 0
Cache-Control: no-cache
Date: Tue, 30 Aug 2013 18:12:54 GMT
ETag: W/"0x5B168C7B6E589D2"
DataServiceVersion: 3.0;NetFx
MaxDataServiceVersion: 3.0;NetFx
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0

Операция Insert Or Merge Entity использует предикат MERGE и должна вызываться версией 2011-08-18 или более поздней. Кроме того, заголовок If-Match не используется. Эти атрибуты отличают данную операцию от операции Update Entity, хотя текст запроса одинаков для обеих операций.

Если операция Insert Or Merge Entity используется для слияния в сущность, то будут сохранены все свойства из предыдущей сущности, если запрос не определяет или не включает их. Свойства со значением null также будут сохранены.

Вызывая операцию Insert or Merge Entity, необходимо указать значения для системных свойств PartitionKey и RowKey. Вместе эти свойства составляют первичный ключ и должны быть уникальными в пределах таблицы.

Значения PartitionKey и RowKey должны быть строковыми. Каждое значение ключа может иметь размер до 64 КБ. Если используется целочисленное значение в качестве значения ключа, то необходимо преобразовать целое число в строку фиксированной ширины, поскольку они сортируются канонически. Например, необходимо преобразовать значение 1 в 0000001, чтобы обеспечить правильную сортировку.

Чтобы явным образом задать свойство, укажите соответствующий тип OData, задав атрибут m:type в пределах определения свойства в веб-канале Atom. Дополнительные сведения о свойствах типов см. в разделе Вставка и обновление сущностей.

Вставлять или обновлять сущность может любое приложение, способное выполнить проверку подлинности и отправить HTTP-запрос MERGE.

Дополнительные сведения о выполнении операций «вставки-обновления» см. в разделе Выполнение транзакций группы сущности.

См. также

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв
Показ:
© 2014 Microsoft. Все права защищены.