Interne Funktionsweise eines benutzerdefinierten Programms how-custom-application-works

Verwenden Sie die folgende Abbildung, um den durchgängigen Workflow zu verstehen, wenn ein digitales Asset mithilfe einem benutzerdefinierten Programm von einem Client verarbeitet wird.

Workflow für benutzerdefinierte Programme

Abbildung: Schritte zur Verarbeitung eines Assets mit Asset Compute Service.

Registrierung registration

Der Client muss /register vor der ersten Anfrage an /process einmal aufrufen, um die Journal-URL für den Empfang von Adobe I/O-Ereignissen für Adobe Asset Compute einzurichten und abzurufen.

curl -X POST \
  https://asset-compute.adobe.io/register \
  -H "x-ims-org-id: $ORG_ID" \
  -H "x-gw-ims-org-id: $ORG_ID" \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "x-api-key: $API_KEY"

Die JavaScript-Bibliothek @adobe/asset-compute-client kann in NodeJS-Programmen verwendet werden, um alle erforderlichen Schritte von der Registrierung über die Verarbeitung bis zur asynchronen Ereignisbehandlung auszuführen. Weitere Informationen zu den erforderlichen Kopfzeilen finden Sie unter Authentifizierung und Autorisierung.

Verarbeitung processing

Der Client sendet eine Verarbeitungsanfrage.

curl -X POST \
  https://asset-compute.adobe.io/process \
  -H "x-ims-org-id: $ORG_ID" \
  -H "x-gw-ims-org-id: $ORG_ID" \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "x-api-key: $API_KEY" \
  -d "<RENDITION_JSON>

Der Client ist für die korrekte Formatierung der Ausgabedarstellungen mit vorab signierten URLs verantwortlich. Die JavaScript-Bibliothek @adobe/node-cloud-blobstore-wrapper kann in NodeJS-Programmen zum Vorsignieren von URLs verwendet werden. Derzeit unterstützt die Bibliothek nur Azure Blob-Speicher und AWS S3-Container.

Die Verarbeitungsanfrage gibt eine requestId zurück, die für die Abfrage von Adobe I/O-Ereignissen verwendet werden kann.

Nachfolgend finden Sie eine Beispielanfrage zur Verarbeitung benutzerdefinierter Programme.

{
    "source": "https://www.adobe.com/some-source-file.jpg",
    "renditions" : [
        {
            "worker": "https://my-project-namespace.adobeioruntime.net/api/v1/web/my-namespace-version/my-worker",
            "name": "rendition1.jpg",
            "target": "https://some-presigned-put-url-for-rendition1.jpg",
        }
    ],
    "userData": {
        "my-asset-id": "1234567890"
    }
}

Asset Compute Service sendet die Ausgabedarstellungsanfragen für das benutzerdefinierte Programm an das benutzerdefinierte Programm. Der Service sendet eine HTTP-POST-Anfrage an die angegebene Programm-URL, bei der es sich um die gesicherte Web-Aktions-URL von App Builder handelt. Alle Anfragen verwenden das HTTPS-Protokoll, um die Datensicherheit zu maximieren.

Das von einem benutzerdefinierten Programm verwendete Asset Compute-SDK verarbeitet die HTTP-POST-Anfrage. Es übernimmt auch das Herunterladen der Quelle, das Hochladen von Ausgabedarstellungen, das Senden von Adobe I/O-Ereignissen und die Fehlerbehandlung.

Programm-Code application-code

Benutzerdefinierter Code muss nur einen Callback bereitstellen, der die lokal verfügbare Quelldatei (source.path) akzeptiert. rendition.path ist der Speicherort, an dem das Endergebnis einer Asset-Verarbeitungsanfrage platziert werden soll. Das benutzerdefinierte Programm verwendet den Callback, um die lokal verfügbaren Quelldateien unter Verwendung des in (rendition.path) angegebenen Namens in eine Ausgabedarstellungsdatei umzuwandeln. Ein benutzerdefiniertes Programm muss in rendition.path schreiben, um eine Ausgabedarstellung zu erstellen:

const { worker } = require('@adobe/asset-compute-sdk');
const fs = require('fs').promises;

// worker() is the entry point in the SDK "framework".
// The asynchronous function defined is the rendition callback.
exports.main = worker(async (source, rendition) => {

    // Tip: custom worker parameters are available in rendition.instructions.
    console.log(rendition.instructions.name); // should print out `rendition.jpg`.

    // Simplest example: copy the source file to the rendition file destination so as to transfer the asset as is without processing.
    await fs.copyFile(source.path, rendition.path);
});

Herunterladen von Quelldateien download-source

Ein benutzerdefiniertes Programm behandelt nur lokale Dateien. Das Herunterladen der Quelldatei erfolgt über das Asset Compute-SDK.

Erstellen von Ausgabedarstellungen rendition-creation

Das SDK ruft für jede Ausgabedarstellung eine asynchrone Ausgabedarstellungs-Callback-Funktion auf.

Die Callback-Funktion hat Zugriff auf die Quell- und Ausgabedarstellungsobjekte. source.path ist bereits vorhanden und ist der Pfad zur lokalen Kopie der Quelldatei. rendition.path ist der Pfad, in dem die verarbeitete Ausgabedarstellung gespeichert werden muss. Sofern das Flag disableSourceDownload nicht gesetzt ist, muss ds Programm den genauen Pfad rendition.path verwenden. Andernfalls kann das SDK die Ausgabedarstellungsdatei nicht finden oder identifizieren und schlägt fehl.

Die übermäßige Vereinfachung des Beispiels dient dazu, die Anatomie eines benutzerdefinierten Programms zu illustrieren und sich darauf zu konzentrieren. Das Programm kopiert die Quelldatei einfach in das Ausgabedarstellungsziel.

Weitere Informationen zu den Callback-Parametern für Ausgabedarstellungen finden Sie unter Asset Compute-SDK-API.

Hochladen von Ausgabedarstellungen upload-rendition

Nachdem jede Ausgabedarstellung erstellt und in einer Datei mit dem in rendition.path angegebenen Pfad gespeichert wurde, lädt das Asset Compute-SDK jede Ausgabedarstellung in einen Cloud-Speicher hoch (entweder AWS oder Azure). Ein benutzerdefiniertes Programm erhält genau dann mehrere Ausgabedarstellungen gleichzeitig, wenn die eingehende Anfrage mehrere Ausgabedarstellungen enthält, die auf dieselbe Programm-URL verweisen. Der Upload in den Cloud-Speicher erfolgt nach jeder Ausgabedarstellung und vor dem Ausführen des Callback für die nächste Ausgabedarstellung.

Das Verhalten von batchWorker() unterscheidet sich, da sie tatsächlich alle Ausgabedarstellungen verarbeitet und diese erst hochlädt, nachdem alle verarbeitet wurden.

Adobe I/O-Ereignisse aio-events

Das SDK sendet Adobe I/O-Ereignisse für jede Ausgabedarstellung. Diese Ereignisse sind je nach Ergebnis entweder vom Typ rendition_created oder rendition_failed. Weitere Informationen zu Ereignissen finden Sie unter Asynchrone Asset Compute-Ereignisse.

Adobe I/O-Ereignisse empfangen receive-aio-events

Der Client fragt das Adobe I/O -Ereignisjournal gemäß seiner Verbrauchslogik ab. Die anfängliche Journal-URL ist die in der /register-API-Antwort angegebene. Ereignisse können mit der in den Ereignissen vorhandenen requestId identifiziert werden, die mit der in /process zurückgegebenen übereinstimmt. Jede Ausgabedarstellung verfügt über ein separates Ereignis, das gesendet wird, sobald die Ausgabedarstellung hochgeladen wurde (oder fehlgeschlagen ist). Sobald der Client ein passendes Ereignis erhält, kann er die resultierenden Ausgabedarstellungen anzeigen oder anderweitig verarbeiten.

Die JavaScript-Bibliothek asset-compute-client vereinfacht die Journalabfrage mithilfe der waitActivation()-Methode zum Abrufen aller Ereignisse.

const events = await assetCompute.waitActivation(requestId);
await Promise.all(events.map(event => {
    if (event.type === "rendition_created") {
        // get rendition from cloud storage location
    }
    else if (event.type === "rendition_failed") {
        // failed to process
    }
    else {
        // other event types
        // (could be added in the future)
    }
}));

Weitere Informationen zum Abrufen von Journalereignissen finden Sie unter Adobe I/O Events-API.

recommendation-more-help
b027be24-3772-44c0-a56d-a4ba23dcb50b