Lot d’objets blob
L’opération Blob Batch
permet d’incorporer plusieurs appels d’API dans une seule requête HTTP. Cette API prend en charge deux types de sous-requêtes : Définir le niveau d’objet blob pour les objets blob de blocs et Supprimer l’objet blob. La réponse retournée par le serveur pour une demande de lot contient les résultats de chaque sous-requête dans le lot. La requête et la réponse par lot utilisent la syntaxe de la OData
spécification de traitement par lots, avec des modifications de sémantique. Cette API est disponible à partir de la version 2018-11-09.
Requête
Vous pouvez construire la Blob Batch
requête comme suit. HTTPS est recommandé. Remplacez myaccount par le nom de votre compte de stockage.
Méthode | URI de demande | Version HTTP |
---|---|---|
POST |
https://myaccount.blob.core.windows.net/?comp=batch https://myaccount.blob.core.windows.net/containername?restype=container&comp=batch |
HTTP/1.1 |
Paramètres URI
Vous pouvez spécifier les paramètres supplémentaires suivants sur l’URI de requête.
Paramètre | Description |
---|---|
timeout |
facultatif. Le paramètre de délai d’expiration est exprimé en secondes, avec une valeur maximale de 120 secondes. Pour plus d’informations, consultez Définition des délais d’expiration pour les opérations de stockage Blob. |
restype |
Facultatif, version 2020-04-08 et ultérieures. La seule valeur prise en charge pour le restype paramètre est container . Lorsque ce paramètre est spécifié, l’URI doit inclure le nom du conteneur. Toutes les sous-requêtes doivent être limitées au même conteneur. |
En-têtes de requête
Le tableau suivant décrit les en-têtes de demande obligatoires ou facultatifs.
En-tête de requête | Description |
---|---|
Authorization |
Obligatoire. Spécifie le schéma d’autorisation, le nom du compte de stockage et la signature. Pour plus d’informations, consultez Autoriser les requêtes auprès du Stockage Azure. |
Date ou x-ms-date |
Obligatoire. Spécifie la date/heure en temps universel coordonné (UTC) pour la requête. Pour plus d’informations, consultez Autoriser les requêtes auprès du Stockage Azure. |
x-ms-version |
Obligatoire pour toutes les demandes autorisées. Spécifie la version de l'opération à utiliser pour cette demande. Cette version sera utilisée pour toutes les sous-requêtes. Pour plus d'informations, consultez la page Contrôle de version pour les services de Stockage Microsoft Azure. |
Content-Length |
Obligatoire. La longueur de la demande. |
Content-Type |
Obligatoire. La valeur de cet en-tête doit être multipart/mixed , avec une limite de lot. Exemple de valeur d’en-tête : multipart/mixed; boundary=batch_a81786c8-e301-4e42-a729-a32ca24ae252 . |
x-ms-client-request-id |
facultatif. Fournit une valeur opaque générée par le client avec une limite de caractères de 1 kibioctet (Kio) enregistrée dans les journaux lors de la configuration de la journalisation. Nous vous recommandons vivement d’utiliser cet en-tête pour mettre en corrélation les activités côté client avec les demandes que le serveur reçoit. Pour plus d’informations, consultez Surveiller Stockage Blob Azure. |
Corps de la demande
Le corps de la demande d’un lot d’objets blob contient une liste de toutes les sous-requêtes. Le format utilise la syntaxe de la OData
spécification de lot, avec des modifications de sémantique.
Le corps de la demande commence par une limite de lot, suivie de deux en-têtes obligatoires : l’en-tête Content-Type
avec la valeur application/http
et l’en-tête Content-Transfer-Encoding
avec la valeur binary
. Elle est suivie d’un en-tête facultatif Content-ID
, avec une valeur de chaîne pour suivre chacune des sous-requêtes. La réponse contient l’en-tête Content-ID
de chaque réponse de sous-demande correspondante à utiliser pour le suivi.
Ces en-têtes de requête sont suivis d’une ligne vide obligatoire, puis de la définition de chaque sous-requête. Le corps de chaque sous-requête est une requête HTTP complète avec un verbe, une URL, des en-têtes et un corps nécessaires pour la requête. Notez les mises en garde suivantes :
- Les sous-requêtes ne doivent pas avoir le
x-ms-version header
. Toutes les sous-requêtes sont exécutées avec la version de requête par lot de niveau supérieur. - L’URL de sous-requête doit avoir uniquement le chemin d’accès de l’URL (sans l’hôte).
- Chaque demande de lot prend en charge un maximum de 256 sous-requêtes.
- Toutes les sous-requêtes doivent être du même type de requête.
- Chaque sous-demande est autorisée séparément, avec les informations fournies dans la sous-demande.
- Chaque ligne du corps de la demande doit se terminer par \r\n caractères.
Exemple de requête
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--
response
La réponse inclut un code de status HTTP et un ensemble d’en-têtes de réponse pour la demande de traitement par lots de niveau supérieur. La réponse inclut également des informations de réponse pour toutes ses sous-requêtes.
Response body
La réponse par lot est une multipart/mixed
réponse, qui contient la réponse pour chaque sous-demande. La réponse est segmentée. Chaque sous-réponse commence par l’en-tête Content-Type: application/http
. L’en-tête Content-ID
suit, s’il a été fourni dans la demande. Ceci est suivi de la réponse HTTP status code et des en-têtes de réponse pour chaque sous-requête.
Pour plus d’informations sur les en-têtes retournés par chaque sous-requête, consultez la documentation relative aux opérations Supprimer un objet blob et Définir le niveau de l’objet blob .
Exemple de réponse
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
Code d’état
Si la demande de lot est bien formée et autorisée, l’opération retourne status code 202 (Accepté). Chaque sous-requête a sa propre réponse, en fonction du résultat de l’opération. La sous-requête status est retournée dans le corps de la réponse.
Pour plus d’informations, consultez État et codes d’erreur.
En-têtes de réponse
La réponse de l'opération inclut les en-têtes suivants. La réponse peut également inclure des en-têtes HTTP standard supplémentaires. Tous les en-têtes standard sont conformes à la spécification du protocole HTTP/1.1.
Autorisation
Quand restype=container
est omis, vous devez autoriser la demande de lot parente à l’aide d’une clé partagée. Vous pouvez utiliser la clé d’accès au compte, une signature d’accès partagé de compte ou Microsoft Entra. Détails pour les mécanismes d’autorisation spécifiques indiqués ci-dessous.
Quand restype=container
est inclus dans la demande, vous pouvez autoriser la requête par lots parente via une clé partagée ou Microsoft Entra. Vous pouvez également autoriser avec une signature d’accès partagé signée par l’un de ces mécanismes d’autorisation. Détails pour les mécanismes d’autorisation spécifiques indiqués ci-dessous.
Chaque sous-demande est autorisée séparément. Une sous-demande prend en charge les mêmes mécanismes d’autorisation que l’opération prend en charge lorsqu’elle ne fait pas partie d’une opération de traitement par lots.
Important
Microsoft recommande d’utiliser Microsoft Entra ID avec des identités managées pour autoriser les demandes dans le stockage Azure. Microsoft Entra ID offre une sécurité et une facilité d’utilisation supérieures par rapport à l’autorisation de clé partagée.
Le Stockage Azure prend en charge l’utilisation de Microsoft Entra ID pour autoriser les demandes de données blob. Avec Microsoft Entra ID, vous pouvez utiliser le contrôle d’accès en fonction du rôle Azure (Azure RBAC) pour accorder des autorisations à un principal de sécurité. Le principal de sécurité peut être un utilisateur, un groupe, un principal de service d’application ou une identité managée Azure. Le principal de sécurité est authentifié par Microsoft Entra ID pour retourner un jeton OAuth 2.0. Le jeton peut ensuite être utilisé pour autoriser une requête auprès du service BLOB.
Pour en savoir plus sur l’autorisation à l’aide de Microsoft Entra ID, consultez Autoriser l’accès aux objets blob à l’aide de Microsoft Entra ID.
Autorisations
Vous trouverez ci-dessous l’action RBAC nécessaire pour qu’un utilisateur, un groupe, une identité managée ou un principal de service Microsoft Entra effectue une Blob Batch
demande parente, ainsi que le rôle RBAC Azure intégré le moins privilégié qui inclut cette action :
- Action RBAC Azure :Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
- Rôle intégré avec privilèges minimum :Contributeur aux données Blob de stockage
Pour en savoir plus sur l’attribution de rôles à l’aide d’Azure RBAC, consultez Attribuer un rôle Azure pour accéder aux données blob.
Facturation
La Blob Batch
requête REST est comptabilisée comme une seule transaction, et chaque sous-requête individuelle est également comptée comme une seule transaction. Pour en savoir plus sur la facturation des sous-requêtes individuelles, consultez la documentation relative aux opérations Supprimer un objet blob et Définir le niveau d’objet blob .
Les demandes de tarification peuvent provenir de clients qui utilisent les API Stockage Blob, soit directement via l’API REST Stockage Blob, soit à partir d’une bibliothèque cliente stockage Azure. Ces demandes accumulent des frais par transaction. Le type de transaction affecte la façon dont le compte est facturé. Par exemple, les transactions de lecture s’accumulent dans une catégorie de facturation différente de celle des transactions d’écriture. Le tableau suivant montre la catégorie de facturation d’une Blob Batch
demande parente en fonction du type de compte de stockage :
Opération | Type de compte de stockage | Catégorie de facturation |
---|---|---|
Lot d’objets blob (Définir le niveau de l’objet blob) | Objet blob de blocs Premium Usage général v2 Standard |
Autres opérations |
Pour en savoir plus sur la tarification de la catégorie de facturation spécifiée, consultez tarification Stockage Blob Azure.
Remarques
L’un des avantages main de l’utilisation d’une demande de traitement par lots est la réduction du nombre de connexions qu’un client doit ouvrir. Notez que les restrictions suivantes s’appliquent :
- Les sous-requêtes prises en charge dans le lot sont
Set Blob Tier
(pour les objets blob de blocs) etDelete Blob
. - Prend uniquement en charge jusqu’à 256 sous-requêtes dans un seul lot. La taille du corps d’une demande de lot ne peut pas dépasser 4 Mo.
- Une demande de lot vide échoue avec le code 400 (requête incorrecte).
- Il n’existe aucune garantie quant à l’ordre d’exécution des sous-requêtes de lot.
- L’exécution de la sous-requête par lot n’est pas atomique. Chaque sous-requête s’exécute indépendamment.
- Chaque sous-demande doit concerner une ressource au sein du même compte de stockage. Une requête par lot unique ne prend pas en charge l’exécution de requêtes provenant de différents comptes de stockage.
- Un corps de requête imbriqué n’est pas pris en charge.
- Si le serveur ne parvient pas à analyser le corps de la demande, le lot entier échoue et aucune requête ne sera exécutée.
- Notez que la signature SAP de compte est le seul type de signature d’accès partagé pris en charge par
Blob Batch
, lorsque le lot n’utiliserestype=container
pas .
Étendre toutes les sous-requêtes à un conteneur spécifique
À compter de la version REST 2020-04-08, l’API prend en charge les Blob Batch
sous-requêtes d’étendue pour un conteneur spécifié. Lorsque l’URI de requête inclut le nom du conteneur et le restype=container
paramètre, chaque sous-requête doit s’appliquer au même conteneur. Si le nom de conteneur spécifié pour une sous-requête ne correspond pas au nom de conteneur fourni dans l’URI, le service retourne le code d’erreur 400 (Demande incorrecte).
Tous les mécanismes d’autorisation pris en charge pour un conteneur sont valides pour une Blob Batch
opération délimitée au conteneur. Chaque sous-demande envoie un en-tête d’autorisation au service.
Voir aussi
Autoriser les demandes à l’état du stockage Azureet les codes d’erreur Codes d’erreur Stockage BlobDéfinition des délais d’expiration pour les opérations de stockage Blob