API HTTP Asset Compute Service asset-compute-http-api
L’utilizzo dell’API è limitato a scopi di sviluppo. L’API viene fornita come contesto durante lo sviluppo di applicazioni personalizzate. Adobe Experience Manager as a Cloud Service utilizza l'API per passare le informazioni di elaborazione a un'applicazione personalizzata. Per ulteriori informazioni, vedere Utilizzare i microservizi delle risorse e i profili di elaborazione.
Qualsiasi client dell'API HTTP Asset Compute Service deve seguire questo flusso di alto livello:
-
È stato eseguito il provisioning di un client come progetto Adobe Developer Console in un'organizzazione IMS. Ogni client separato (sistema o ambiente) richiede un proprio progetto separato per separare il flusso di dati dell’evento.
-
Un client genera un token di accesso per l'account tecnico utilizzando l'autenticazione JWT (Service Account).
-
Un client chiama
/registeruna sola volta per recuperare l'URL del diario. -
Un client chiama
/processper ogni risorsa per la quale desidera generare rappresentazioni. La chiamata è asincrona. -
Un client esegue regolarmente il polling del diario per ricevere eventi. Riceve eventi per ogni rendering richiesto quando il rendering viene elaborato correttamente (
rendition_createdtipo di evento) o se si verifica un errore (rendition_failedtipo di evento).
Il modulo adobe-asset-compute-client semplifica l'utilizzo dell'API nel codice Node.js.
Autenticazione e autorizzazione authentication-and-authorization
Tutte le API richiedono l’autenticazione tramite token di accesso. Le richieste devono impostare le seguenti intestazioni:
-
Intestazione
Authorizationcon token Bearer, che è il token dell'account tecnico, ricevuto tramite JWT Exchange dal progetto Adobe Developer Console. Gli ambiti sono documentati di seguito. -
Intestazione
x-gw-ims-org-idcon ID organizzazione IMS. -
x-api-keycon l'ID client del progetto Adobe Developers Console.
Ambiti scopes
Verifica che il token di accesso sia conforme ai seguenti ambiti:
openidAdobeIDasset_computeread_organizationsevent_receiverevent_receiver_apiadobeio_apiadditional_info.rolesadditional_info.projectedProductContext
Questi ambiti richiedono la sottoscrizione del progetto Adobe Developer Console ai servizi Asset Compute, I/O Events e I/O Management API. La ripartizione dei singoli ambiti è la seguente:
-
Base
- ambiti:
openid,AdobeID
- ambiti:
-
Asset compute
- metascope:
asset_compute_meta - ambiti:
asset_compute,read_organizations
- metascope:
-
Adobe
I/O Events- metascope:
event_receiver_api - ambiti:
event_receiver,event_receiver_api
- metascope:
-
Adobe
I/O Management API- metascope:
ent_adobeio_sdk - ambiti:
adobeio_api,additional_info.roles,additional_info.projectedProductContext
- metascope:
Registrazione register
Ogni client di Asset Compute service - un progetto Adobe Developer Console univoco sottoscritto al servizio - deve registrarsi prima di elaborare le richieste. Il passaggio di registrazione restituisce il giornale di registrazione eventi univoco necessario per recuperare gli eventi asincroni dall’elaborazione della rappresentazione.
Al termine del ciclo di vita, un client può annullare la registrazione.
Registra richiesta register-request
Questa chiamata API configura un client Asset Compute e fornisce l'URL del giornale di registrazione eventi. Questo processo è un’operazione idempotente e deve essere chiamato solo una volta per ogni client. Può essere richiamato nuovamente per recuperare l’URL del diario.
POST/registerAuthorizationx-request-idRegistra risposta register-response
application/jsonX-Request-IdX-Request-Id o generata in modo univoco. Da utilizzare per identificare le richieste tra sistemi, o richieste di supporto, o entrambe.journal, ok o requestId campi.I codici di stato HTTP sono:
-
200 riuscito: quando la richiesta è riuscita. L'URL
journalriceve notifiche sui risultati dell'elaborazione asincrona avviata tramite/process. Avvisarendition_createdeventi al completamento orendition_failedeventi se il processo non riesce.code language-json { "ok": true, "journal": "https://api.adobe.io/events/organizations/xxxxx/integrations/xxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "requestId": "1234567890" } -
401 Non autorizzato: si verifica quando la richiesta non dispone di autenticazione valida. Un esempio potrebbe essere un token di accesso non valido o una chiave API non valida.
-
403 Non consentito: si verifica quando la richiesta non dispone di autorizzazione valida. Un esempio potrebbe essere un token di accesso valido, ma il progetto Adobe Developer Console (account tecnico) non è abbonato a tutti i servizi richiesti.
-
429 Troppe richieste: si verifica quando questo client o in altro modo sovraccarica il sistema. I client devono riprovare con un backoff esponenziale. Il corpo è vuoto.
-
4xx errore: errore del client e registrazione non riuscita. Di solito viene restituita una risposta JSON come questa, anche se ciò non è garantito per tutti gli errori:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
5xx error: si verifica quando si è verificato un altro errore sul lato server e la registrazione non è riuscita. Di solito viene restituita una risposta JSON come questa, anche se ciò non è garantito per tutti gli errori:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
Annulla registrazione richiesta unregister-request
Questa chiamata API annulla la registrazione di un client Asset Compute. Dopo l'annullamento della registrazione non sarà più possibile chiamare /process. L'utilizzo della chiamata API per un client non registrato o per un client non ancora registrato restituisce un errore 404.
POST/unregisterAuthorizationx-request-idAnnulla registrazione risposta unregister-response
application/jsonX-Request-IdX-Request-Id o generata in modo univoco. Utilizza per identificare le richieste tra i sistemi o le richieste di supporto.ok e requestId campi.I codici di stato sono:
-
200 operazione riuscita: si verifica quando la registrazione e il giornale di registrazione vengono trovati e rimossi.
code language-json { "ok": true, "requestId": "1234567890" } -
401 Non autorizzato: si verifica quando la richiesta non dispone di autenticazione valida. Un esempio potrebbe essere un token di accesso non valido o una chiave API non valida.
-
403 Non consentito: si verifica quando la richiesta non dispone di autorizzazione valida. Un esempio potrebbe essere un token di accesso valido, ma il progetto Adobe Developer Console (account tecnico) non è abbonato a tutti i servizi richiesti.
-
404 Non trovato: questo stato viene visualizzato quando le credenziali fornite vengono annullate o non sono valide.
code language-json { "ok": true, "requestId": "1234567890" } -
429 Troppe richieste: si verifica quando il sistema è sovraccarico. I client devono riprovare con un backoff esponenziale. Il corpo è vuoto.
-
4xx errore: si verifica quando si è verificato un altro errore del client e l'annullamento della registrazione non è riuscito. Di solito viene restituita una risposta JSON come questa, anche se ciò non è garantito per tutti gli errori:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
5xx error: si verifica quando si è verificato un altro errore sul lato server e la registrazione non è riuscita. Di solito viene restituita una risposta JSON come questa, anche se ciò non è garantito per tutti gli errori:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
Richiesta di elaborazione process-request
L'operazione process invia un processo che trasforma una risorsa di origine in più rappresentazioni, in base alle istruzioni contenute nella richiesta. Le notifiche di completamento (tipo evento rendition_created) o di errori (tipo evento rendition_failed) vengono inviate a un giornale di registrazione eventi che deve essere recuperato una volta con /register prima di effettuare un numero qualsiasi di richieste /process. Le richieste formate in modo errato hanno immediatamente esito negativo con un codice di errore 400.
I riferimenti binari vengono eseguiti utilizzando URL, ad esempio URL prefirmati di Amazon AWS S3 o URL SAS di archiviazione Azure Blob. Utilizzato sia per leggere la risorsa source (GET URL) che per scrivere le rappresentazioni (PUT URL). Il client è responsabile della generazione di questi URL prefirmati.
POST/processapplication/jsonAuthorizationx-request-idElabora JSON richiesta process-request-json
Il corpo della richiesta di /process è un oggetto JSON con questo schema di alto livello:
{
"source": "",
"renditions" : []
}
I campi disponibili sono:
sourcestringfmt=zip)."http://example.com/image.jpg"sourceobjectfmt=zip).{"url": "http://example.com/image.jpg", "mimeType": "image/jpeg" }renditionsarray[{ "target": "https://....", "fmt": "png" }]source può essere un <string> visualizzato come URL oppure un <object> con un campo aggiuntivo. Le seguenti varianti sono simili:
"source": "http://example.com/image.jpg"
"source": {
"url": "http://example.com/image.jpg"
}
Campi oggetto Source source-object-fields
urlstring"http://example.com/image.jpg"namestringcontent-disposition della risorsa binaria. Impostazione predefinita: "file"."image.jpg"sizenumbercontent-length della risorsa binaria.10234mimetypestringcontent-type della risorsa binaria."image/jpeg"Un esempio completo di richiesta process 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"
}]
}
Risposta processo process-response
La richiesta /process restituisce immediatamente un risultato positivo o negativo in base alla convalida della richiesta di base. L’elaborazione effettiva delle risorse avviene in modo asincrono.
application/jsonX-Request-IdX-Request-Id o generata in modo univoco. Utilizza per identificare le richieste tra i sistemi o le richieste di supporto.ok e requestId campi.Codici di stato:
-
200 completato: se la richiesta è stata inviata correttamente. JSON di risposta include
"ok": true:code language-json { "ok": true, "requestId": "1234567890" } -
400 Richiesta non valida: se la richiesta non è strutturata correttamente, ad esempio se nel payload JSON mancano i campi obbligatori. JSON di risposta include
"ok": false:code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
401 Non autorizzato: quando la richiesta non dispone di autenticazione valida. Un esempio potrebbe essere un token di accesso non valido o una chiave API non valida.
-
403 Non consentito: se la richiesta non dispone di autorizzazione valida. Un esempio potrebbe essere un token di accesso valido, ma il progetto Adobe Developer Console (account tecnico) non è abbonato a tutti i servizi richiesti.
-
429 Troppe richieste: si verifica quando il sistema è sovraccarico, a causa di questo particolare client o della domanda complessiva. I client possono riprovare con un backoff esponenziale. Il corpo è vuoto.
-
4xx errore: quando si è verificato un altro errore del client. Di solito viene restituita una risposta JSON come questa, anche se ciò non è garantito per tutti gli errori:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" } -
5xx errore: quando si è verificato un altro errore lato server. Di solito viene restituita una risposta JSON come questa, anche se ciò non è garantito per tutti gli errori:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
La maggior parte dei client è probabilmente incline a ritentare la stessa richiesta con backoff esponenziale per qualsiasi errore eccetto problemi di configurazione come 401 o 403 o richieste non valide come 400. A parte la regolare limitazione delle tariffe tramite risposte 429, un’interruzione temporanea del servizio o una limitazione potrebbero causare errori 5xx. Sarebbe quindi consigliabile riprovare dopo un certo periodo di tempo.
Tutte le risposte JSON (se presenti) includono requestId, che è lo stesso valore dell'intestazione X-Request-Id. Adobe consiglia di leggere dall’intestazione perché è sempre presente. requestId viene restituito anche in tutti gli eventi relativi all'elaborazione delle richieste come requestId. I client non devono fare alcuna supposizione sul formato di questa stringa. È un identificatore di stringa opaco.
Consenso alla post-elaborazione opt-in-to-post-processing
Asset Compute SDK supporta un set di opzioni di post-elaborazione di base per le immagini. I processi di lavoro personalizzati possono acconsentire in modo esplicito alla post-elaborazione impostando il campo postProcess sull'oggetto rendering su true.
I casi d’uso supportati sono:
- Ritaglio è una rappresentazione di un rettangolo i cui limiti sono definiti da crop.w, crop.h, crop.x e crop.y. I dettagli di ritaglio sono specificati nel campo
instructions.cropdell'oggetto di rendering. - Ridimensionare le immagini utilizzando la larghezza, l'altezza o entrambe.
instructions.widtheinstructions.heightlo definiscono nell'oggetto di rendering. Per ridimensionare utilizzando solo la larghezza o l'altezza, impostate un solo valore. Il servizio di elaborazione conserva le proporzioni. - Imposta la qualità per un'immagine JPEG.
instructions.qualitylo definisce nell'oggetto di rendering. Un livello di qualità pari a 100 rappresenta la qualità più elevata, mentre un numero inferiore indica una diminuzione della qualità. - Creazione di immagini interlacciate.
instructions.interlacelo definisce nell'oggetto di rendering. - Impostate DPI per regolare le dimensioni di rendering per la pubblicazione desktop regolando la scala applicata ai pixel.
instructions.dpilo definisce nell'oggetto di rendering per modificare la risoluzione dpi. Tuttavia, per ridimensionare l'immagine in modo che abbia le stesse dimensioni a una risoluzione diversa, utilizzare le istruzioniconvertToDpi. - Ridimensiona l’immagine in modo che la larghezza o l’altezza di cui è stato eseguito il rendering rimanga invariata rispetto all’originale alla risoluzione di destinazione specificata (DPI).
instructions.convertToDpilo definisce nell'oggetto di rendering.
Risorse filigrana add-watermark
Asset Compute SDK supporta l'aggiunta di una filigrana ai file immagine PNG, JPEG, TIFF e GIF. La filigrana viene aggiunta seguendo le istruzioni per il rendering nell'oggetto watermark del rendering.
La filigrana viene eseguita durante la post-elaborazione della rappresentazione. Per applicare una filigrana alle risorse, il processo di lavoro personalizzato opta per la post-elaborazione impostando il campo postProcess dell'oggetto di rendering su true. Se il lavoratore non acconsente, la filigrana non viene applicata, anche se l’oggetto filigrana è impostato sull’oggetto di rendering nella richiesta.
Istruzioni per la rappresentazione rendition-instructions
Di seguito sono riportate le opzioni disponibili per l'array renditions in /process.
Campi comuni common-fields
fmtstringtext per l'estrazione del testo e xmp per l'estrazione dei metadati XMP come XML. Visualizza formati supportatipngworkerstringhttps://. Se questo campo è presente, la copia trasformata viene creata da un'applicazione personalizzata. Qualsiasi altro campo di rendering impostato viene quindi utilizzato nell’applicazione personalizzata."https://1234.adobeioruntime.net/api/v1/web/example-custom-worker-master/worker"targetstringhttp://w.com/img.jpgtargetobjectInformazioni sul caricamento di URL prefirmati in più parti per la rappresentazione generata. Queste informazioni sono per AEM / Caricamento binario diretto Oak con questo comportamento di caricamento multipart.
Campi:
urls: array di stringhe, uno per ogni URL parte prefirmatominPartSize: dimensione minima da utilizzare per una parte = urlmaxPartSize: dimensione massima da utilizzare per una parte = url
{ "urls": [ "https://part1...", "https://part2..." ], "minPartSize": 10000, "maxPartSize": 100000 }userDataobject{ ... }Campi specifici della rappresentazione rendition-specific-fields
Per un elenco dei formati di file attualmente supportati, vedere formati di file supportati.
**embedBinaryLimitnumber in byteembedBinaryLimit, la copia viene inserita in una posizione nell'archiviazione cloud e non viene incorporata nell'evento.3276widthnumber200heightnumber200Le proporzioni vengono sempre mantenute se:
- Sono specificati sia
widthcheheight, quindi l'immagine si adatta alle dimensioni mantenendo le proporzioni - Se si specifica solo
widthoheight, l'immagine risultante utilizza la dimensione corrispondente mantenendo le proporzioni - Se
widthoheightnon è specificato, viene utilizzata la dimensione in pixel dell'immagine originale. Dipende dal tipo di origine. Per alcuni formati, ad esempio i file PDF, viene utilizzata una dimensione predefinita. Può essere presente un limite di dimensioni massimo.
qualitynumber1 e 100. Applicabile solo alle rappresentazioni di immagini.90xmpstringinterlacebooltrue. Non ha alcun effetto su altri formati di file.jpegSizenumberquality. Non ha alcun effetto su altri formati.dpinumber oppure object96 oppure { xdpi: 96, ydpi: 96 }convertToDpinumber oppure object96 oppure { xdpi: 96, ydpi: 96 }filesarrayElenco di file da includere nell'archivio ZIP (fmt=zip). Ogni voce può essere una stringa URL o un oggetto con i campi:
url: URL per scaricare il filepath: archivia il file nel percorso specificato nel file ZIP
[{ "url": "https://host/asset.jpg", "path": "folder/location/asset.jpg" }]duplicatestringfmt=zip). Per impostazione predefinita, più file memorizzati nello stesso percorso nel file ZIP generano un errore. Se si imposta duplicate su ignore, viene archiviata solo la prima risorsa e il resto viene ignorato.ignoreCampi specifici della filigrana watermark-specific-fields
Il formato PNG viene utilizzato come filigrana.
scalenumber0.0 e 1.0. 1.0 significa che la filigrana ha la scala originale (1:1) e i valori più bassi ne riducono la dimensione.0.5 indica metà delle dimensioni originali.imageurlEventi asincroni asynchronous-events
Al termine dell'elaborazione di una copia trasformata o quando si verifica un errore, un evento viene inviato a un Adobe I/O Events Journal. I client devono ascoltare l'URL del diario fornito tramite /register. La risposta del journal include un array event costituito da un oggetto per ogni evento, di cui il campo event include il payload dell'evento effettivo.
Il tipo di Adobe I/O Events per tutti gli eventi di Asset Compute Service è asset_compute. Il giornale di registrazione è sottoscritto automaticamente solo a questo tipo di evento e non è necessario filtrare ulteriormente in base al tipo di evento Adobe Developer. I tipi di evento specifici del servizio sono disponibili nella proprietà type dell'evento.
Tipi di evento event-types
rendition_createdrendition_failedAttributi evento event-attributes
datestring*requestIdstring*/process, come intestazione X-Request-Id.sourceobject*source della richiesta /process.userDataobject*userData della rappresentazione dalla richiesta /process se impostata.renditionobjectrendition_*/process.errorMessagestringrendition_failedMetadati metadata
repo:sizerepo:sha1dc:formatrepo:encodingtiff:ImageWidthtiff:ImageLengthMotivi di errore error-reasons
RenditionFormatUnsupportedSourceUnsupportedSourceCorruptRenditionTooLargetarget. Le dimensioni effettive del rendering sono disponibili come metadati in repo:size e vengono utilizzate dal client per rielaborare il rendering con il numero corretto di URL prefirmati.GenericError