Пакет больших двоичных объектов
Эта Blob Batch
операция позволяет внедрить несколько вызовов API в один HTTP-запрос. Этот API поддерживает два типа вложенных запросов: Задать уровень BLOB-объектов для блочных BLOB-объектов и Удалить BLOB-объект. Ответ, возвращаемый сервером для пакетного запроса, содержит результаты для каждого вложенного запроса в пакете. Пакетный запрос и ответ используют синтаксис спецификации OData
пакетной обработки с изменениями семантики. Этот API доступен начиная с версии 2018-11-09.
Запрос
Запрос можно создать Blob Batch
следующим образом. Рекомендуется использовать протокол HTTPS. Замените myaccount именем своей учетной записи хранения.
Метод | Универсальный код ресурса (URI) запроса | параметр "Версия HTTP" |
---|---|---|
POST |
https://myaccount.blob.core.windows.net/?comp=batch https://myaccount.blob.core.windows.net/containername?restype=container&comp=batch |
HTTP/1.1 |
Параметры универсального кода ресурса (URI)
В URI запроса можно указать следующие дополнительные параметры.
Параметр | Описание |
---|---|
timeout |
Необязательный элемент. Параметр времени ожидания выражается в секундах с максимальным значением 120 секунд. Дополнительные сведения см. в разделе Настройка времени ожидания для операций с хранилищем BLOB-объектов. |
restype |
Необязательно, версия 2020-04-08 и более поздние. Для параметра поддерживается restype container только значение . Если указан этот параметр, универсальный код ресурса (URI) должен содержать имя контейнера. Все вложенные запросы должны быть ограничены тем же контейнером. |
Заголовки запросов
В следующей таблице перечислены обязательные и необязательные заголовки запросов.
Заголовок запроса | Описание |
---|---|
Authorization |
Обязательный. Указывает схему авторизации, имя учетной записи хранения и подпись. Дополнительные сведения см. в статье Авторизация запросов к Службе хранилища Azure. |
Date или x-ms-date |
Обязательный. Задает время запроса в формате UTC. Дополнительные сведения см. в статье Авторизация запросов к Службе хранилища Azure. |
x-ms-version |
Требуется для всех авторизованных запросов. Задает версию операции, используемой для этого запроса. Эта версия будет использоваться для всех вложенных запросов. Дополнительные сведения см. в разделе Управление версиями для служб хранилища Azure. |
Content-Length |
Обязательный. Длина запроса. |
Content-Type |
Обязательный. Значение этого заголовка должно быть multipart/mixed равно , с границей пакета. Пример значения заголовка: multipart/mixed; boundary=batch_a81786c8-e301-4e42-a729-a32ca24ae252 . |
x-ms-client-request-id |
Необязательный элемент. Предоставляет созданное клиентом непрозрачное значение с ограничением в 1 кибибайт (КиБ), которое записывается в журналы при настройке ведения журнала. Мы настоятельно рекомендуем использовать этот заголовок для сопоставления действий на стороне клиента с запросами, получаемыми сервером. Дополнительные сведения см. в разделе Мониторинг Хранилище BLOB-объектов Azure. |
Текст запроса
Текст запроса для пакета BLOB-объектов содержит список всех вложенных запросов. Формат использует синтаксис спецификации OData
пакета с изменениями семантики.
Текст запроса начинается с границы пакета, за которой следуют два обязательных заголовка: Content-Type
заголовок со значением application/http
и Content-Transfer-Encoding
заголовок со значением binary
. За ним следует необязательный Content-ID
заголовок со строковым значением для отслеживания каждого из вложенных запросов. Ответ содержит Content-ID
заголовок для каждого соответствующего ответа вложенного запроса, используемого для отслеживания.
За этими заголовками запроса следует обязательная пустая строка, а затем определение для каждого вложенного запроса. Текст каждого вложенного запроса представляет собой полный HTTP-запрос с командой, URL-адресом, заголовками и текстом запроса. Обратите внимание на следующие предостережения.
- Вложенные запросы не должны содержать
x-ms-version header
. Все вложенные запросы выполняются с версией пакетного запроса верхнего уровня. - URL-адрес вложенного запроса должен содержать только путь к URL-адресу (без узла).
- Каждый пакетный запрос поддерживает не более 256 вложенных запросов.
- Все вложенные запросы должны иметь один и тот же тип запроса.
- Каждое вложенное расследование авторизоваться отдельно, с информацией, предоставленной в подзапросе.
- Каждая строка в тексте запроса должна заканчиваться \r\n символами.
Пример запроса
POST http://account.blob.core.windows.net/?comp=batch HTTP/1.1
Content-Type: multipart/mixed; boundary=batch_357de4f7-6d0b-4e02-8cd2-6361411a9525
x-ms-version: 2018-11-09
Authorization: SharedKey account:QvaoYDQ+0VcaA/hKFjUmQmIxXv2RT3XwwTsOTHL39HI=
Host: 127.0.0.1:10000
Content-Length: 1569
--batch_357de4f7-6d0b-4e02-8cd2-6361411a9525
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: 0
DELETE /container0/blob0 HTTP/1.1
x-ms-date: Thu, 14 Jun 2018 16:46:54 GMT
Authorization: SharedKey account:G4jjBXA7LI/RnWKIOQ8i9xH4p76pAQ+4Fs4R1VxasaE=
Content-Length: 0
--batch_357de4f7-6d0b-4e02-8cd2-6361411a9525
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: 1
DELETE /container1/blob1 HTTP/1.1
x-ms-date: Thu, 14 Jun 2018 16:46:54 GMT
Authorization: SharedKey account:IvCoYDQ+0VcaA/hKFjUmQmIxXv2RT3XwwTsOTHL39HI=
Content-Length: 0
--batch_357de4f7-6d0b-4e02-8cd2-6361411a9525
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: 2
DELETE /container2/blob2 HTTP/1.1
x-ms-date: Thu, 14 Jun 2018 16:46:54 GMT
Authorization: SharedKey account:S37N2JTjcmOQVLHLbDmp2johz+KpTJvKhbVc4M7+UqI=
Content-Length: 0
--batch_357de4f7-6d0b-4e02-8cd2-6361411a9525--
Ответ
Ответ включает код состояния HTTP и набор заголовков ответа для пакетного запроса верхнего уровня. Ответ также содержит сведения об ответе для всех вложенных запросов.
Текст ответа
Пакетный ответ — это multipart/mixed
ответ, который содержит ответ для каждого вложенного запроса. Ответ фрагментирован. Каждый вложенный ответ начинается с заголовка Content-Type: application/http
. Заголовок Content-ID
следует за заголовком , если он был указан в запросе. За ним следует код состояния HTTP-ответа и заголовки ответа для каждого вложенного запроса.
Сведения о заголовках, возвращаемых каждым вложенным запросом, см. в документации по операциям Удаления BLOB-объекта и Задания уровня BLOB-объектов .
Пример ответа
HTTP/1.1 202 Accepted
Transfer-Encoding: chunked
Content-Type: multipart/mixed; boundary=batchresponse_66925647-d0cb-4109-b6d3-28efe3e1e5ed
x-ms-request-id: 778fdc83-801e-0000-62ff-033467000000
x-ms-version: 2018-11-09
409
--batchresponse_66925647-d0cb-4109-b6d3-28efe3e1e5ed
Content-Type: application/http
Content-ID: 0
HTTP/1.1 202 Accepted
x-ms-delete-type-permanent: true
x-ms-request-id: 778fdc83-801e-0000-62ff-0334671e284f
x-ms-version: 2018-11-09
--batchresponse_66925647-d0cb-4109-b6d3-28efe3e1e5ed
Content-Type: application/http
Content-ID: 1
HTTP/1.1 202 Accepted
x-ms-delete-type-permanent: true
x-ms-request-id: 778fdc83-801e-0000-62ff-0334671e2851
x-ms-version: 2018-11-09
--batchresponse_66925647-d0cb-4109-b6d3-28efe3e1e5ed
Content-Type: application/http
Content-ID: 2
HTTP/1.1 404 The specified blob does not exist.
x-ms-error-code: BlobNotFound
x-ms-request-id: 778fdc83-801e-0000-62ff-0334671e2852
x-ms-version: 2018-11-09
Content-Length: 216
Content-Type: application/xml
<?xml version="1.0" encoding="utf-8"?>
<Error><Code>BlobNotFound</Code><Message>The specified blob does not exist.
RequestId:778fdc83-801e-0000-62ff-0334671e2852
Time:2018-06-14T16:46:54.6040685Z</Message></Error>
--batchresponse_66925647-d0cb-4109-b6d3-28efe3e1e5ed--
0
Код состояния
Если пакетный запрос имеет правильный формат и авторизован, операция возвращает код состояния 202 (принято). Каждый вложенный запрос имеет собственный ответ в зависимости от результата операции. Состояние вложенного запроса возвращается в тексте ответа.
Дополнительные сведения см. в разделе Состояние и коды ошибок.
Заголовки ответов
Ответ для этой операции включает следующие заголовки. Ответ может также включать дополнительные стандартные заголовки HTTP. Все стандартные заголовки соответствуют спецификации протокола HTTP/1.1.
Авторизация
Если restype=container
параметр опущен, необходимо авторизовать родительский пакетный запрос с помощью общего ключа. Вы можете использовать ключ доступа учетной записи, подписанный URL-адрес учетной записи или Microsoft Entra. Ниже приведены сведения о конкретных механизмах авторизации.
Если restype=container
включен в запрос, вы можете авторизовать родительский пакетный запрос с помощью общего ключа или Microsoft Entra. Вы также можете авторизоваться с помощью подписанного URL-адреса, подписанного с помощью любого из этих механизмов авторизации. Ниже приведены сведения о конкретных механизмах авторизации.
Каждое подзапроса авторизоваться отдельно. Вложенный запрос поддерживает те же механизмы авторизации, что и операция, если она не является частью пакетной операции.
Важно!
Корпорация Майкрософт рекомендует использовать Microsoft Entra ID с управляемыми удостоверениями для авторизации запросов к службе хранилища Azure. Microsoft Entra ID обеспечивает более высокий уровень безопасности и простоту использования по сравнению с авторизацией с общим ключом.
Служба хранилища Azure поддерживает использование Microsoft Entra ID для авторизации запросов к данным BLOB-объектов. С помощью Microsoft Entra ID можно использовать управление доступом на основе ролей Azure (Azure RBAC) для предоставления разрешений субъекту безопасности. Субъектом безопасности может быть пользователь, группа, субъект-служба приложения или управляемое удостоверение Azure. Субъект безопасности проходит проверку подлинности Microsoft Entra ID для возврата маркера OAuth 2.0. Затем маркер можно использовать для авторизации запроса к службе BLOB-объектов.
Дополнительные сведения об авторизации с помощью Microsoft Entra ID см. в статье Авторизация доступа к BLOB-объектам с помощью Microsoft Entra ID.
Разрешения
Ниже перечислены действия RBAC, необходимые для Microsoft Entra пользователя, группы, управляемого удостоверения или субъекта-службы для выполнения родительского Blob Batch
запроса, а также встроенная роль Azure RBAC с наименьшими привилегиями, которая включает это действие:
- Действие Azure RBAC:Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
- Встроенная роль с минимальными привилегиями:Участник данных BLOB-объектов хранилища
Дополнительные сведения о назначении ролей с помощью Azure RBAC см. в статье Назначение роли Azure для доступа к данным BLOB-объектов.
Выставление счетов
Запрос Blob Batch
REST учитывается как одна транзакция, а каждый отдельный вложенный запрос также учитывается как одна транзакция. Дополнительные сведения о выставлении счетов за отдельные вложенные запросы см. в документации по операциям удаления BLOB-объектов и задания уровня BLOB-объектов .
Запросы на ценообразование могут поступать от клиентов, использующих API хранилища BLOB-объектов, напрямую через REST API хранилища BLOB-объектов или из клиентской библиотеки службы хранилища Azure. Эти запросы начисляют плату за транзакцию. Тип транзакции влияет на способ оплаты учетной записи. Например, транзакции чтения начисляются к категории выставления счетов, отличной от категории операций записи. В следующей таблице показана категория выставления счетов для родительского Blob Batch
запроса на основе типа учетной записи хранения.
Операция | Тип учетной записи хранения | Категория выставления счетов |
---|---|---|
Пакетная служба BLOB-объектов (установка уровня BLOB-объектов) | Блочный BLOB-объект (ценовая категории "Премиум") Общего назначения версии 2 (цен. категория "Стандартный") |
Другие операции |
Дополнительные сведения о ценах на указанную категорию выставления счетов см. в разделе Цены на Хранилище BLOB-объектов Azure.
Комментарии
Одним из main преимуществ использования пакетного запроса является сокращение количества подключений, которые должен открывать клиент. Обратите внимание на следующие ограничения:
- В пакете поддерживаются вложенные запросы
Set Blob Tier
(для блочных BLOB-объектов) иDelete Blob
. - Поддерживает только до 256 вложенных запросов в одном пакете. Размер текста пакетного запроса не может превышать 4 МБ.
- Пустой пакетный запрос завершается ошибкой с кодом 400 (недопустимый запрос).
- Нет никаких гарантий по порядку выполнения вложенных запросов пакета.
- Выполнение вложенного запроса пакетной службы не является атомарным. Каждый вложенный запрос выполняется независимо.
- Каждый вложенный запрос должен быть для ресурса в одной учетной записи хранения. Один пакетный запрос не поддерживает выполнение запросов из разных учетных записей хранения.
- Вложенный текст запроса не поддерживается.
- Если серверу не удается проанализировать текст запроса, весь пакет завершается ошибкой, и запрос не будет выполняться.
- Обратите внимание, что SAS учетной записи является единственным типом подписанного URL-адреса, поддерживаемым
Blob Batch
, если пакет не используетrestype=container
.
Область действия всех вложенных запросов к определенному контейнеру
Начиная с REST версии 2020-04-08 API Blob Batch
поддерживает определение области подзапросов в указанном контейнере. Если универсальный код ресурса (URI) запроса содержит имя контейнера и restype=container
параметр , каждый вложенный запрос должен применяться к одному и тому же контейнеру. Если имя контейнера, указанное для вложенного запроса, не соответствует имени контейнера, указанному в универсальном коде ресурса (URI), служба возвращает код ошибки 400 (недопустимый запрос).
Все механизмы авторизации, поддерживаемые для контейнера, допустимы для Blob Batch
операции с областью действия контейнера. Каждое вложенное запрос отправляет заголовок авторизации в службу.
См. также раздел
Авторизация запросов к состоянию службы хранилища Azureи коды ошибокхранилища BLOB-объектов.Установка времени ожидания для операций с хранилищем BLOB-объектов