API HTTP Asset Compute Service asset-compute-http-api
L’utilisation de l’API est limitée à des fins de développement. L’API est fournie à titre de contexte pour le développement d’applications personnalisées. Adobe Experience Manager as a Cloud Service utilise l’API pour transmettre les informations de traitement à une application personnalisée. Pour plus d’informations, voir Utilisation des microservices de ressources et des profils de traitement.
Toute personne cliente de l’API HTTP Asset Compute Service doit appliquer ce flux de haut niveau :
-
Une personne cliente est configurée en tant que projet Adobe Developer Console dans une organisation IMS. Chaque personne cliente (système ou environnement) distincte a besoin de son propre projet pour séparer le flux de données d’événement.
-
Un client génère un jeton d’accès pour le compte technique à l’aide de l’authentification JWT (compte de service).
-
Un client n’appelle
/registerqu’une seule fois pour récupérer l’URL du journal. -
Un client appelle
/processpour chaque ressource pour laquelle il souhaite générer des rendus. L’appel est asynchrone. -
Un client interroge régulièrement le journal pour recevoir des événements. Il reçoit des événements pour chaque rendu demandé et traité (type d’événement
rendition_created) ou en cas d’erreur (type d’événementrendition_failed).
Le module adobe-asset-compute-client facilite l’utilisation de l’API dans le code Node.js.
Authentification et autorisation authentication-and-authorization
Toutes les API nécessitent une authentification par jeton d’accès. Les requêtes doivent définir les en-têtes suivants :
-
En-tête
Authorizationavec jeton support, qui est le jeton de compte technique, reçu par le biais d’un échange JWT issu du projet Adobe Developer Console. Les portées sont décrites ci-dessous. -
En-tête
x-gw-ims-org-idavec l’ID d’organisation IMS. -
x-api-keyavec l’ID client du projet Adobe Developers Console.
Portées scopes
Vérifiez les portées suivantes pour le jeton d’accès :
openidAdobeIDasset_computeread_organizationsevent_receiverevent_receiver_apiadobeio_apiadditional_info.rolesadditional_info.projectedProductContext
Ces portées nécessitent que le projet Adobe Developer Console souscrive aux services Asset Compute, I/O Events et I/O Management API. La répartition des portées individuelles est la suivante :
-
De base
- Portées :
openid,AdobeID
- Portées :
-
Asset Compute
- Metascope :
asset_compute_meta - Portées :
asset_compute,read_organizations
- Metascope :
-
Adobe
I/O Events- Metascope :
event_receiver_api - Portées :
event_receiver,event_receiver_api
- Metascope :
-
Adobe
I/O Management API- Metascope :
ent_adobeio_sdk - Portées :
adobeio_api,additional_info.roles,additional_info.projectedProductContext
- Metascope :
Enregistrement register
Chaque personne cliente d’Asset Compute service (un projet Adobe Developer Console unique, abonné au service) doit s’enregistrer avant de procéder à des demandes de traitement. L’étape d’enregistrement renvoie le journal unique des événements, nécessaire pour récupérer les événements asynchrones issus du traitement du rendu.
À la fin de son cycle de vie, une personne cliente peut annuler son enregistrement.
Demande d’enregistrement register-request
Cet appel d’API configure une personne cliente Asset Compute et fournit l’URL du journal des événements. Ce processus est une opération idempotente (c’est-à-dire ayant le même effet si elle est appliquée une ou plusieurs fois), qui ne doit être appelée qu’une seule fois pour chaque personne cliente. Elle peut être de nouveau appelée pour récupérer l’URL du journal.
POST/registerAuthorizationx-request-idRéponse à l’enregistrement register-response
application/jsonX-Request-IdX-Request-Id ou à celui généré de manière unique. Sert à identifier les requêtes entre systèmes et/ou les demandes d’assistance.journal, ok ou requestId.Les codes d’état HTTP sont les suivants :
-
200 Success : lorsque la requête est acceptée. L’URL
journalreçoit des notifications sur les résultats du traitement asynchrone initié par le biais de/process. Elle signale les événementsrendition_createdune fois l’opération terminée, ou les événementsrendition_faileden cas d’échec du processus.code language-json { "ok": true, "journal": "https://api.adobe.io/events/organizations/xxxxx/integrations/xxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "requestId": "1234567890" } -
401 Unauthorized : survient lorsque la requête ne dispose pas d’une authentification valide. Il peut s’agir, par exemple, d’un jeton d’accès ou d’une clé d’API non valide.
-
403 Forbidden : survient lorsque la demande ne dispose pas d’une autorisation valide. Par exemple, si le jeton d’accès est valide, mais que le projet Adobe Developer Console (compte technique) n’est pas abonné à tous les services requis.
-
429 Trop de requêtes : survient lorsque ce client ou cette cliente, ou une autre personne, surcharge le système. Les clients doivent effectuer un nouvel essai avec un backoff exponentiel (pour diminuer la fréquence du processus). Le corps est vide.
-
Error 4xx : survient en cas d’erreur client, quelle qu’elle soit, et d’échec de l’enregistrement. Généralement, une réponse JSON de ce type est renvoyée, même si ce n’est pas garanti pour toutes les erreurs :
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
Error 5xx : survient en cas d’erreur côté serveur, quelle qu’elle soit, et d’échec de l’enregistrement. Généralement, une réponse JSON de ce type est renvoyée, même si ce n’est pas garanti pour toutes les erreurs :
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
Requête d’annulation d’enregistrement unregister-request
Cet appel d’API annule l’enregistrement d’une personne cliente Asset Compute. Après l’annulation de cet enregistrement, il n’est plus possible d’appeler /process. L’utilisation de l’appel d’API, pour un client non enregistré ou un client à enregistrer, renvoie une erreur 404.
POST/unregisterAuthorizationx-request-idRéponse à l’annulation de l’enregistrement unregister-response
application/jsonX-Request-IdX-Request-Id ou à celui généré de manière unique. Sert à identifier les requêtes entre systèmes ou les demandes d’assistance.ok et requestId.Les codes d’état sont les suivants :
-
200 Success : survient lorsque l’enregistrement et le journal sont trouvés et supprimés.
code language-json { "ok": true, "requestId": "1234567890" } -
401 Unauthorized : survient lorsque la requête ne dispose pas d’une authentification valide. Il peut s’agir, par exemple, d’un jeton d’accès ou d’une clé d’API non valide.
-
403 Forbidden : survient lorsque la demande ne dispose pas d’une autorisation valide. Par exemple, si le jeton d’accès est valide, mais que le projet Adobe Developer Console (compte technique) n’est pas abonné à tous les services requis.
-
404 Introuvable : ce statut s’affiche lorsque les informations d’identification fournies ne sont pas enregistrées ou ne sont pas valides.
code language-json { "ok": true, "requestId": "1234567890" } -
429 Too many requests : survient lorsque le système est surchargé. Les clients doivent effectuer un nouvel essai avec un backoff exponentiel (pour diminuer la fréquence du processus). Le corps est vide.
-
Error 4xx : survient lorsqu’une autre erreur client s’est produite et que l’annulation de l’enregistrement a échoué. Généralement, une réponse JSON de ce type est renvoyée, même si ce n’est pas garanti pour toutes les erreurs :
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
Error 5xx : survient en cas d’erreur côté serveur, quelle qu’elle soit, et d’échec de l’enregistrement. Généralement, une réponse JSON de ce type est renvoyée, même si ce n’est pas garanti pour toutes les erreurs :
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
Requête de traitement process-request
L’opération process lance une tâche chargée de transformer une ressource source en plusieurs rendus, en fonction des instructions contenues dans la requête. Des notifications de succès de l’exécution (type d’événement rendition_created) ou d’erreur (type d’événement rendition_failed) sont envoyées à un journal des événements. Celui-ci doit être récupéré en utilisant une fois /register avant de lancer un nombre quelconque de requêtes /process. Les requêtes incorrectement formulées échouent immédiatement avec un code d’erreur 400.
Les fichiers binaires sont référencés à l’aide d’URL, telles que les URL présignées Amazon AWS S3 ou les URL de stockage Blob Azure SAS. Utilisé pour lire la ressource source (URL GET) et écrire les rendus (URL PUT). Il appartient au client de générer ces URL présignées.
POST/processapplication/jsonAuthorizationx-request-idRequête de traitement JSON process-request-json
Le corps de la requête de /process est un objet JSON dont le schéma est le suivant :
{
"source": "",
"renditions" : []
}
Les champs disponibles sont les suivants :
sourcestringfmt=zip)."http://example.com/image.jpg"sourceobjectfmt=zip).{"url": "http://example.com/image.jpg", "mimeType": "image/jpeg" }renditionsarray[{ "target": "https://....", "fmt": "png" }]La source peut être soit une chaîne <string>, considérée comme une URL, ou un objet (<object>) avec un champ supplémentaire. Les variantes suivantes sont similaires :
"source": "http://example.com/image.jpg"
"source": {
"url": "http://example.com/image.jpg"
}
Champs d’objet source source-object-fields
urlstring"http://example.com/image.jpg"namestringcontent-disposition de la ressource binaire. La valeur par défaut est « file »."image.jpg"sizenumbercontent-length de la ressource binaire.10234mimetypestringcontent-type de la ressource binaire."image/jpeg"Exemple de requête process complète complete-process-request-example
{
"source": "https://www.adobe.com/content/dam/acom/en/lobby/lobby-bg-bts2017-logged-out-1440x860.jpg",
"renditions" : [{
"name": "image.48x48.png",
"target": "https://some-presigned-put-url-for-image.48x48.png",
"fmt": "png",
"width": 48,
"height": 48
},{
"name": "image.200x200.jpg",
"target": "https://some-presigned-put-url-for-image.200x200.jpg",
"fmt": "jpg",
"width": 200,
"height": 200
},{
"name": "cqdam.xmp.xml",
"target": "https://some-presigned-put-url-for-cqdam.xmp.xml",
"fmt": "xmp"
},{
"name": "cqdam.text.txt",
"target": "https://some-presigned-put-url-for-cqdam.text.txt",
"fmt": "text"
}]
}
Réponse du traitement process-response
La requête /process renvoie immédiatement un succès ou un échec en fonction de la validation de la requête de base. Le traitement des ressources se produit de manière asynchrone.
application/jsonX-Request-IdX-Request-Id ou à celui généré de manière unique. Sert à identifier les requêtes entre systèmes ou les demandes d’assistance.ok et requestId.Codes d’état :
-
200 Success : si la demande a été envoyée avec succès. La réponse JSON comprend
"ok": true:code language-json { "ok": true, "requestId": "1234567890" } -
400 Requête non valide : si la requête n’est pas correctement structurée, par exemple s’il manque les champs requis dans le payload JSON. La réponse JSON comprend
"ok": false:code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
401 Unauthorized : lorsque la requête ne dispose pas d’une authentification valide. Il peut s’agir, par exemple, d’un jeton d’accès ou d’une clé d’API non valide.
-
403 Forbidden : lorsque la demande ne dispose pas d’une autorisation valide. Par exemple, si le jeton d’accès est valide, mais que le projet Adobe Developer Console (compte technique) n’est pas abonné à tous les services requis.
-
429 Trop de requêtes : survient lorsque le système est dépassé, soit en raison de ce client ou de cette cliente spécifique, soit en raison de la demande globale. Les clients peuvent effectuer un nouvel essai avec un backoff exponentiel (pour diminuer la fréquence du processus). Le corps est vide.
-
Error 4xx : en cas d’erreur client, quelle qu’elle soit. Généralement, une réponse JSON de ce type est renvoyée, même si ce n’est pas garanti pour toutes les erreurs :
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
Error 5xx : survient en cas d’erreur côté serveur, quelle qu’elle soit. Généralement, une réponse JSON de ce type est renvoyée, même si ce n’est pas garanti pour toutes les erreurs :
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
La plupart des clientes et des clients sont susceptibles de réessayer la même requête avec un backoff exponentiel suite à une erreur, à l’exception des problèmes de configuration, comme 401 ou 403, ou des requêtes non valides comme 400. Outre la limitation du débit normal par le biais de réponses 429, une interruption ou une limitation de service temporaire peut entraîner des erreurs 5xx. Il est dans ce cas conseillé de réessayer après un certain temps.
Toutes les réponses JSON (le cas échéant) incluent la valeur requestId, identique à celle de l’en-tête X-Request-Id. Adobe recommande la lecture à partir de l’en-tête, car il est toujours présent. La valeur requestId est également renvoyée dans tous les événements relatifs aux requêtes de traitement sous la forme requestId. Les clientes et clients ne doivent pas présumer du format de cette chaîne. Il s’agit d’un identifiant de chaîne opaque.
Souscrire au post-traitement opt-in-to-post-processing
Le SDK Asset Compute prend en charge un ensemble d’options de base pour le post-traitement d’images. Les programmes de travail personnalisés peuvent explicitement souscrire au post-traitement en définissant le champ postProcess de l’objet de rendu sur true.
Les cas d’utilisation pris en charge sont les suivants :
- Le recadrage est un rendu d’un rectangle dont les limites sont définies par crop.w, crop.h, crop.x et crop.y. Les détails du recadrage sont spécifiés dans le champ
instructions.cropde l’objet du rendu. - Redimensionner les images en utilisant la largeur, la hauteur ou les deux.
instructions.widthetinstructions.heightles définissent dans l’objet de rendu. Pour redimensionner une image en utilisant uniquement la largeur ou la hauteur, définissez une seule valeur. Compute Service conserve les proportions. - Définir la qualité d’une image JPEG.
instructions.qualityla définit dans l’objet de rendu. Un niveau de qualité de 100 représente la qualité la plus élevée, tandis qu’un nombre plus faible représente une baisse de qualité. - Créer des images entrelacées.
instructions.interlaceles définit dans l’objet de rendu. - Définissez la résolution en PPP pour ajuster la taille des rendus à des fins de publication sur ordinateur en ajustant l’échelle appliquée aux pixels.
instructions.dpiles définit dans l’objet de rendu pour modifier la résolution en PPP. Cependant, pour redimensionner l’image afin qu’elle ait la même taille, mais avec une résolution différente, utilisez les instructionsconvertToDpi. - Redimensionner l’image pour que sa largeur ou sa hauteur de rendu reste identique à celle de l’image d’origine avec la résolution cible (ppp) spécifiée.
instructions.convertToDpiles définit dans l’objet de rendu.
Mise en filigrane de ressources add-watermark
Le SDK Asset Compute prend en charge l’ajout d’un filigrane aux fichiers d’image PNG, JPEG, TIFF et GIF. Le filigrane est ajouté à la suite des instructions de rendu dans l’objet watermark.
Le filigrane est appliqué pendant le post-traitement du rendu. Pour les ressources de filigrane, le programme de travail personnalisé opte pour le post-traitement en définissant le champ postProcess de l’objet de rendu sur true. Si l’utilisateur ou l’utilisatrice ne souscrit pas, le filigrane n’est pas appliqué, même si, dans la requête, l’objet de filigrane est défini sur l’objet de rendu.
Instructions de rendu rendition-instructions
Les options suivantes sont disponibles pour le tableau renditions dans /process.
Champs communs common-fields
fmtstringtext pour l’extraction de texte et xmp pour l’extraction de métadonnées XMP au format XML. Voir Formats pris en chargepngworkerstringhttps://. Si ce champ est présent, une application personnalisée crée le rendu. Tout autre champ de rendu défini est ensuite utilisé dans l’application personnalisée."https://1234.adobeioruntime.net/api/v1/web/example-custom-worker-master/worker"targetstringhttp://w.com/img.jpgtargetobjectInformations de chargement d’URL présignée en plusieurs parties pour le rendu généré. Ces informations sont pour un chargement binaire direct AEM/Oak avec ce comportement de chargement en plusieurs parties.
Champs :
urls: tableau de chaînes, une pour chaque URL de partie pré-signéeminPartSize: taille minimale à utiliser pour une partie = urlmaxPartSize: taille maximale à utiliser pour une partie = url
{ "urls": [ "https://part1...", "https://part2..." ], "minPartSize": 10000, "maxPartSize": 100000 }userDataobject{ ... }Champs spécifiques au rendu rendition-specific-fields
Pour obtenir la liste des formats de fichiers actuellement pris en charge, voir Formats de fichiers pris en charge.
**embedBinaryLimitnumber en octetsembedBinaryLimit, il est enregistré dans un espace de stockage dans le cloud et n’est pas incorporé à l’événement.3276widthnumber200heightnumber200Le format est toujours conservé dans les cas suivants :
- Les valeurs
widthetheightsont spécifiées. L’image est alors adaptée à la taille tout en conservant les proportions. - Si seule la valeur
widthouheightest spécifiée, l’image obtenue utilise la dimension correspondante tout en conservant le format. - Si la valeur
widthouheightn’est spécifiée, la taille en pixels de l’image d’origine est utilisée. Cela dépend du type de source. Pour certains formats, comme les fichiers PDF, une taille par défaut est utilisée. Il peut y avoir une limite de taille maximale.
qualitynumber1 et 100. Applicable uniquement aux rendus d’image.90xmpstringinterlacebooltrue. N’a aucun effet sur les autres formats de fichiers.jpegSizenumberquality. Cela n’a aucun effet sur les autres formats.dpinumber ou object96 ou { xdpi: 96, ydpi: 96 }convertToDpinumber ou object96 ou { xdpi: 96, ydpi: 96 }filesarrayListe des fichiers à inclure dans l’archive ZIP (fmt=zip). Chaque entrée peut être soit une chaîne URL, soit un objet avec les champs :
url: URL de téléchargement du fichierpath: stockage du fichier selon ce chemin d’accès dans le fichier ZIP
[{ "url": "https://host/asset.jpg", "path": "folder/location/asset.jpg" }]duplicatestringfmt=zip). Par défaut, une erreur est générée si plusieurs fichiers de l’archive ZIP sont stockés sous le même chemin d’accès. Si vous définissez la valeur de duplicate sur ignore, seule la première ressource sera stockée et le reste sera ignoré.ignoreChamps spécifiques aux filigranes watermark-specific-fields
Le format PNG est utilisé comme filigrane.
scalenumber0.0 et 1.0. 1.0 signifie que le filigrane est à son échelle d’origine (1:1) et que les valeurs inférieures réduisent sa taille.0.5 correspond à la moitié de la taille d’origine.imageurlÉvénements asynchrones asynchronous-events
Une fois le traitement d’un rendu terminé ou si une erreur se produit, un événement est envoyé à un I/O Events Journal Adobe. Les clientes et clients doivent écouter l’URL du journal fournie par le biais de /register. La réponse du journal comprend un tableau event constitué d’un objet pour chaque événement, dont le champ event contient le payload réel de l’événement.
Le type I/O Events Adobe pour tous les événements d’Asset Compute Service est asset_compute. Le journal est automatiquement abonné exclusivement à ce type d’événement et il n’est pas nécessaire d’effectuer un filtrage en fonction du type Événement Adobe Developer. Les types d’événements spécifiques au service sont disponibles dans la propriété type de l’événement.
Types d’événements event-types
rendition_createdrendition_failedAttributs d’événement event-attributes
datestring*requestIdstring*/process, identique à l’en-tête X-Request-Id.sourceobject*source de la requête /process.userDataobject*userData du rendu issu de la requête /process, si une définition existe.renditionobjectrendition_*/process.errorMessagestringrendition_failedMétadonnées metadata
repo:sizerepo:sha1dc:formatrepo:encodingtiff:ImageWidthtiff:ImageLengthRaisons de l’erreur error-reasons
RenditionFormatUnsupportedSourceUnsupportedSourceCorruptRenditionTooLargetarget. La taille réelle du rendu est disponible sous forme de métadonnées dans repo:size et est utilisée par le client ou la cliente pour traiter à nouveau ce rendu avec le nombre approprié d’URL présignées.GenericError