Internt i ett anpassat program how-custom-application-works

Använd följande bild för att förstå hela arbetsflödet när en digital resurs bearbetas med ett anpassat program av en klient.

Anpassat programarbetsflöde

Bild: Steg som används vid bearbetning av en resurs med Adobe Asset Compute Service.

Registrering registration

Klienten måste anropa /register en gång före den första begäran till /process så att den kan ställa in och hämta journal-URL:en för att ta emot Adobe I/O Events -händelser för Adobe Asset compute.

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"

JavaScript-biblioteket @adobe/asset-compute-client kan användas i NodeJS-program för att hantera alla nödvändiga steg från registrering, bearbetning till asynkron händelsehantering. Mer information om obligatoriska rubriker finns i Autentisering och auktorisering.

Bearbetar processing

Klienten skickar en bearbetningsbegäran.

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>

Klienten ansvarar för att formatera återgivningarna korrekt med försignerade URL:er. JavaScript-biblioteket @adobe/node-cloud-blobstore-wrapper kan användas i NodeJS-program för att försignera URL:er. För närvarande stöder biblioteket endast Azure Blob Storage och AWS S3 Containers.

Bearbetningsbegäran returnerar en requestId som kan användas för avsökning av Adobe I/O-händelser.

Nedan följer ett exempel på en anpassad begäran om programbearbetning.

{
    "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 skickar begäranden om anpassade programåtergivningar till det anpassade programmet. Den använder en HTTP-POST till den angivna program-URL:en, som är den skyddade webbåtgärds-URL:en från App Builder. Alla förfrågningar använder HTTPS-protokollet för att maximera datasäkerheten.

Asset compute SDK som används av ett anpassat program hanterar HTTP-POSTENS begäran. Det hanterar också hämtning av källan, överföring av återgivningar, sändning av Adobe I/O Events och felhantering.

Programkod application-code

Anpassad kod behöver bara tillhandahålla ett återanrop som tar den lokalt tillgängliga källfilen (source.path). rendition.path är platsen där det slutliga resultatet av en resursbearbetningsbegäran ska placeras. Det anpassade programmet använder återanropet för att omvandla de lokalt tillgängliga källfilerna till en återgivningsfil med det namn som skickades (rendition.path). Ett anpassat program måste skriva till rendition.path för att skapa en återgivning:

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);
});

Hämta källfiler download-source

Ett anpassat program hanterar bara lokala filer. Asset compute SDK hanterar hämtningen av källfilen.

Skapa återgivning rendition-creation

SDK anropar en asynkron återgivningscallback-funktion för varje återgivning.

Callback-funktionen har åtkomst till objekten source och rendition. source.path finns redan och är sökvägen till den lokala kopian av källfilen. rendition.path är sökvägen där den bearbetade återgivningen måste lagras. Om inte flaggan disableSourceDownload anges måste programmet använda exakt rendition.path. Annars kan SDK inte hitta eller identifiera återgivningsfilen och misslyckas.

Den alltför enkla framställningen av exemplet görs för att illustrera och fokusera på anatomin i ett anpassat program. Programmet kopierar bara källfilen till återgivningsmålet.

Mer information om återgivningens återanropsparametrar finns i Asset Compute SDK API.

Överför renderingar upload-rendition

När varje återgivning har skapats och lagrats i en fil med sökvägen som tillhandahålls av rendition.path, överför Asset compute SDK varje återgivning till ett molnlagringsutrymme (antingen AWS eller Azure). Ett anpassat program hämtar flera återgivningar samtidigt om, och bara om, den inkommande begäran har flera återgivningar som pekar på samma program-URL. Överföringen till molnlagringen görs efter varje återgivning och innan återanropet för nästa återgivning körs.

batchWorker() har ett annat beteende. Alla återgivningar bearbetas, och först när alla har bearbetats överförs de.

Adobe I/O händelser aio-events

SDK skickar Adobe I/O Events för varje återgivning. Dessa händelser är antingen av typen rendition_created eller rendition_failed beroende på resultatet. Mer information finns i asynkrona händelser i Asset compute.

Ta emot Adobe I/O händelser receive-aio-events

Klienten avsöker Adobe I/O Events-journalen enligt dess förbrukningslogik. Den inledande journal-URL:en är den som anges i API-svaret för /register. Händelser kan identifieras med hjälp av requestId som finns i händelserna och är samma som returneras i /process. Varje återgivning har en separat händelse som skickas så snart återgivningen har överförts (eller misslyckats). När klienten tar emot en matchande händelse kan den visa eller på annat sätt hantera de resulterande återgivningarna.

JavaScript-biblioteket asset-compute-client gör journalavsökningen enkel med metoden waitActivation() för att hämta alla händelser.

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)
    }
}));

Mer information om hur du hämtar journalhändelser finns i Adobe I/O Events API.

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