API HTTP Asset Compute Service asset-compute-http-api
O uso da API é limitado a fins de desenvolvimento. A API é fornecida como um contexto ao desenvolver aplicativos personalizados. Adobe Experience Manager como Cloud Service usa a API para transmitir as informações de processamento para um aplicativo personalizado. Para obter mais informações, consulte Usar microsserviços de ativos e Perfis de processamento.
Qualquer cliente da API HTTP Asset Compute Service deve seguir este fluxo de alto nível:
-
Um cliente é provisionado como um projeto Adobe Developer Console em uma organização IMS. Cada cliente separado (sistema ou ambiente) requer seu próprio projeto separado para separar o fluxo de dados do evento.
-
Um cliente gera um token de acesso para a conta técnica usando a Autenticação JWT (Conta de Serviço).
-
Um cliente chama
/register
apenas uma vez para recuperar a URL do diário. -
Um cliente chama
/process
para cada ativo para o qual deseja gerar representações. A chamada é assíncrona. -
Um cliente sonda regularmente o diário para receber eventos. Ele recebe eventos para cada representação solicitada quando a representação é processada com êxito (
rendition_created
tipo de evento) ou se há um erro (rendition_failed
tipo de evento).
O módulo adobe-asset-compute-client facilita o uso da API no código Node.js.
Autenticação e autorização authentication-and-authorization
Todas as APIs exigem autenticação de token de acesso. As solicitações devem definir os seguintes cabeçalhos:
-
Cabeçalho
Authorization
com token de portador, que é o token de conta técnica, recebido via JWT exchange do projeto Adobe Developer Console. Os escopos estão documentados abaixo. -
Cabeçalho
x-gw-ims-org-id
com a ID da organização IMS. -
x-api-key
com a ID de cliente do projeto Adobe Developers Console.
Escopos scopes
Verifique os seguintes escopos para o token de acesso:
openid
AdobeID
asset_compute
read_organizations
event_receiver
event_receiver_api
adobeio_api
additional_info.roles
additional_info.projectedProductContext
Esses escopos exigem que o projeto Adobe Developer Console seja inscrito nos serviços Asset Compute
, I/O Events
e I/O Management API
. O detalhamento de escopos individuais é:
-
Básico
- escopos:
openid,AdobeID
- escopos:
-
Asset compute
- metascope:
asset_compute_meta
- escopos:
asset_compute,read_organizations
- metascope:
-
Adobe
I/O Events
- metascope:
event_receiver_api
- escopos:
event_receiver,event_receiver_api
- metascope:
-
Adobe
I/O Management API
- metascope:
ent_adobeio_sdk
- escopos:
adobeio_api,additional_info.roles,additional_info.projectedProductContext
- metascope:
Registro register
Cada cliente do Asset Compute service - um projeto Adobe Developer Console exclusivo que assinou o serviço - deve se registrar antes de fazer solicitações de processamento. A etapa de registro retorna o diário de eventos exclusivo necessário para recuperar os eventos assíncronos do processamento de representação.
No final de seu ciclo de vida, um cliente pode cancelar o registro.
Registrar solicitação register-request
Esta chamada de API configura um cliente Asset Compute e fornece a URL do diário de eventos. Esse processo é uma operação idempotente e só precisa ser chamado uma vez para cada cliente. Ele pode ser chamado novamente para recuperar o URL do diário.
POST
/register
Authorization
x-request-id
Registrar resposta register-response
application/json
X-Request-Id
X-Request-Id
ou gerado exclusivamente. Use para identificar solicitações entre sistemas, solicitações de suporte ou ambas.journal
, ok
ou requestId
.Os códigos de status HTTP são:
-
200 Êxito: quando a solicitação é bem-sucedida. A URL
journal
recebe notificações sobre os resultados do processamento assíncrono iniciado por meio de/process
. Ele alertarendition_created
eventos após a conclusão bem-sucedida ourendition_failed
eventos se o processo falhar.code language-json { "ok": true, "journal": "https://api.adobe.io/events/organizations/xxxxx/integrations/xxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "requestId": "1234567890" }
-
401 Não autorizado: ocorre quando a solicitação não tem autenticação válida. Um exemplo pode ser um token de acesso inválido ou uma chave de API inválida.
-
403 Proibido: ocorre quando a solicitação não tem uma autorização válida. Um exemplo pode ser um token de acesso válido, mas o projeto do Adobe Developer Console (conta técnica) não está inscrito em todos os serviços necessários.
-
429 Muitas solicitações: ocorre quando este cliente ou sobrecarrega o sistema. Os clientes devem tentar novamente com um retrocesso exponencial. O corpo está vazio.
-
4xx erro: quando houve qualquer outro erro de cliente e o registro falhou. Normalmente, uma resposta JSON como essa é retornada, embora isso não seja garantido para todos os erros:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
-
5xx erro: ocorre quando ocorre qualquer outro erro no lado do servidor e o registro falha. Normalmente, uma resposta JSON como essa é retornada, embora isso não seja garantido para todos os erros:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
Cancelar registro da solicitação unregister-request
Esta chamada de API cancela o registro de um cliente Asset Compute. Após esse cancelamento de registro, não será mais possível chamar /process
. O uso da chamada de API para um cliente não registrado ou para um cliente a ser registrado retorna um erro 404
.
POST
/unregister
Authorization
x-request-id
Cancelar registro da resposta unregister-response
application/json
X-Request-Id
X-Request-Id
ou gerado exclusivamente. Use para identificar solicitações entre sistemas ou solicitações de suporte.ok
e requestId
campos.Os códigos de status são:
-
200 Success: ocorre quando o registro e o diário são encontrados e removidos.
code language-json { "ok": true, "requestId": "1234567890" }
-
401 Não autorizado: ocorre quando a solicitação não tem autenticação válida. Um exemplo pode ser um token de acesso inválido ou uma chave de API inválida.
-
403 Proibido: ocorre quando a solicitação não tem uma autorização válida. Um exemplo pode ser um token de acesso válido, mas o projeto do Adobe Developer Console (conta técnica) não está inscrito em todos os serviços necessários.
-
404 Não encontrado: este status aparece quando as credenciais fornecidas têm registro cancelado ou são inválidas.
code language-json { "ok": true, "requestId": "1234567890" }
-
429 Muitas solicitações: ocorre quando o sistema está sobrecarregado. Os clientes devem tentar novamente com um retrocesso exponencial. O corpo está vazio.
-
4xx erro: ocorre quando ocorreu qualquer outro erro de cliente e o cancelamento de registro falhou. Normalmente, uma resposta JSON como essa é retornada, embora isso não seja garantido para todos os erros:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
-
5xx erro: ocorre quando ocorre qualquer outro erro no lado do servidor e o registro falha. Normalmente, uma resposta JSON como essa é retornada, embora isso não seja garantido para todos os erros:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
Processar solicitação process-request
A operação process
envia um trabalho que transforma um ativo de origem em várias representações, com base nas instruções na solicitação. Notificações sobre conclusão bem-sucedida (tipo de evento rendition_created
) ou quaisquer erros (tipo de evento rendition_failed
) são enviadas a um diário de Eventos que deve ser recuperado usando /register
uma vez antes de fazer qualquer número de /process
solicitações. Solicitações formadas incorretamente falham imediatamente com um código de erro 400.
Os binários são referenciados usando URLs, como URLs pré-assinados do Amazon AWS S3 ou URLs SAS do Armazenamento Azure Blob. Usado para ler o ativo source
(GET
URLs) e gravar as representações (PUT
URLs). O cliente é responsável por gerar esses URLs pré-assinados.
POST
/process
application/json
Authorization
x-request-id
Processar solicitação JSON process-request-json
O corpo da solicitação de /process
é um objeto JSON com este esquema de alto nível:
{
"source": "",
"renditions" : []
}
Os campos disponíveis são:
source
string
fmt=zip
)."http://example.com/image.jpg"
source
object
fmt=zip
).{"url": "http://example.com/image.jpg", "mimeType": "image/jpeg" }
renditions
array
[{ "target": "https://....", "fmt": "png" }]
O source
pode ser um <string>
que é visto como uma URL ou pode ser um <object>
com um campo adicional. As seguintes variantes são semelhantes:
"source": "http://example.com/image.jpg"
"source": {
"url": "http://example.com/image.jpg"
}
Campos de objeto do Source source-object-fields
url
string
"http://example.com/image.jpg"
name
string
content-disposition
do recurso binário. O padrão é "file"."image.jpg"
size
number
content-length
do recurso binário.10234
mimetype
string
content-type
do recurso binário."image/jpeg"
Um exemplo completo de solicitação 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"
}]
}
Processar resposta process-response
A solicitação /process
retorna imediatamente com êxito ou falha com base na validação básica da solicitação. O processamento de ativos real ocorre de forma assíncrona.
application/json
X-Request-Id
X-Request-Id
ou gerado exclusivamente. Use para identificar solicitações entre sistemas ou solicitações de suporte.ok
e requestId
campos.Códigos de status:
-
200 Êxito: se a solicitação foi enviada com êxito. O JSON de resposta inclui
"ok": true
:code language-json { "ok": true, "requestId": "1234567890" }
-
400 Solicitação inválida: se a solicitação estiver estruturada incorretamente, por exemplo, se não tiver campos obrigatórios na carga JSON. O JSON de resposta inclui
"ok": false
:code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
-
401 Não autorizado: quando a solicitação não tem autenticação válida. Um exemplo pode ser um token de acesso inválido ou uma chave de API inválida.
-
403 Proibido: quando a solicitação não tem autorização válida. Um exemplo pode ser um token de acesso válido, mas o projeto do Adobe Developer Console (conta técnica) não está inscrito em todos os serviços necessários.
-
429 Muitas solicitações: ocorre quando o sistema está sobrecarregado, seja devido a este cliente específico ou devido à demanda geral. Os clientes podem tentar novamente com um retrocesso exponencial. O corpo está vazio.
-
4xx erro: quando havia qualquer outro erro de cliente. Normalmente, uma resposta JSON como essa é retornada, embora isso não seja garantido para todos os erros:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
-
5xx erro: quando havia qualquer outro erro do lado do servidor. Normalmente, uma resposta JSON como essa é retornada, embora isso não seja garantido para todos os erros:
code language-json { "ok": false, "requestId": "1234567890", "message": "error message" }
Provavelmente, a maioria dos clientes está inclinada a repetir a mesma solicitação com retirada exponencial em qualquer erro exceto, problemas de configuração como 401 ou 403 ou solicitações inválidas como 400. Além da limitação de taxa regular por meio de respostas 429, uma interrupção ou limitação temporária de serviço pode resultar em erros 5xx. Em seguida, seria aconselhável tentar novamente após um período.
Todas as respostas JSON (se presentes) incluem o requestId
, que é o mesmo valor que o cabeçalho X-Request-Id
. O Adobe recomenda a leitura do cabeçalho, pois ele está sempre presente. O requestId
também é retornado em todos os eventos relacionados às solicitações de processamento como requestId
. Os clientes não devem fazer nenhuma suposição sobre o formato dessa cadeia de caracteres. É um identificador de sequência de caracteres opaco.
Aceitar o pós-processamento opt-in-to-post-processing
O SDK do Asset Compute dá suporte a um conjunto de opções básicas de pós-processamento de imagem. Os trabalhadores personalizados podem aceitar explicitamente o pós-processamento definindo o campo postProcess
no objeto de representação como true
.
Os casos de uso compatíveis são:
- Cortar é uma representação de um retângulo cujos limites por crop.w, crop.h, crop.x e crop.y estão definidos. Os detalhes de corte estão especificados no campo
instructions.crop
do objeto de representação. - Redimensionar imagens usando largura, altura ou ambos. O
instructions.width
einstructions.height
o definem no objeto de representação. Para redimensionar usando apenas largura ou altura, defina apenas um valor. O serviço de computação conserva a taxa de proporção. - Defina a qualidade de uma imagem JPEG. O
instructions.quality
o define no objeto de representação. Um nível de qualidade de 100 representa a qualidade mais alta, enquanto números mais baixos significam uma diminuição na qualidade. - Criar imagens entrelaçadas. O
instructions.interlace
o define no objeto de representação. - Defina DPI para ajustar o tamanho renderizado para fins de publicação em desktop, ajustando a escala aplicada aos pixels. O
instructions.dpi
o define no objeto de representação para alterar a resolução de dpi. Entretanto, para redimensionar a imagem para que ela tenha o mesmo tamanho em uma resolução diferente, use as instruções deconvertToDpi
. - Redimensionar a imagem de forma que sua largura ou altura renderizada permaneça a mesma que a original na resolução de destino especificada (DPI). O
instructions.convertToDpi
o define no objeto de representação.
Inserir marca d'água em ativos add-watermark
O SDK do Asset compute oferece suporte à adição de uma marca d'água aos arquivos de imagem PNG, JPEG, TIFF e GIF. A marca d'água é adicionada seguindo as instruções de representação no objeto watermark
na representação.
A marca d'água é feita durante o pós-processamento da representação. Para adicionar ativos de marca d'água, o trabalhador personalizado opta pelo pós-processamento definindo o campo postProcess
no objeto de representação como true
. Se o trabalhador não aceitar, a marca d'água não será aplicada, mesmo se o objeto de marca d'água estiver definido no objeto de representação na solicitação.
Instruções de representação rendition-instructions
Estas são as opções disponíveis para a matriz renditions
em /process
.
Campos comuns common-fields
fmt
string
text
para extração de texto e xmp
para extração de metadados XMP como xml. Ver formatos com suportepng
worker
string
https://
. Se esse campo estiver presente, um aplicativo personalizado criará a representação. Qualquer outro campo de representação definido é usado no aplicativo personalizado."https://1234.adobeioruntime.net
/api/v1/web
/example-custom-worker-master/worker"
target
string
http://w.com/img.jpg
target
object
Informações de upload de URL pré-assinado de várias partes para a representação gerada. Estas informações são para AEM/Carregamento binário direto do Oak com este comportamento de carregamento multiparte.
Campos:
urls
: matriz de cadeias de caracteres, uma para cada URL de parte pré-assinadaminPartSize
: o tamanho mínimo a ser usado para uma parte = urlmaxPartSize
: o tamanho máximo a ser usado para uma parte = url
{ "urls": [ "https://part1...", "https://part2..." ], "minPartSize": 10000, "maxPartSize": 100000 }
userData
object
{ ... }
Campos específicos da representação rendition-specific-fields
Para obter uma lista de formatos de arquivo com suporte no momento, consulte formatos de arquivo com suporte.
*
*
embedBinaryLimit
number
em bytesembedBinaryLimit
, ela será colocada em um local no armazenamento na nuvem e não será incorporada ao evento.3276
width
number
200
height
number
200
A proporção será sempre mantida se:
width
eheight
estão especificados, então a imagem se ajusta ao tamanho, mantendo a proporção- Se apenas
width
ouheight
for especificado, a imagem resultante usará a dimensão correspondente, mantendo a taxa de proporção - Se
width
ouheight
não for especificado, o tamanho original do pixel da imagem será usado. Depende do tipo de origem. Para alguns formatos, como arquivos PDF, um tamanho padrão é usado. Pode haver um limite de tamanho máximo.
quality
number
1
a 100
. Aplicável somente para representações de imagem.90
xmp
string
interlace
bool
true
. Não tem efeito em outros formatos de arquivo.jpegSize
number
quality
. Não tem efeito em outros formatos.dpi
number
ou object
96
ou { xdpi: 96, ydpi: 96 }
convertToDpi
number
ou object
96
ou { xdpi: 96, ydpi: 96 }
files
array
Lista de arquivos a serem incluídos no arquivo ZIP (fmt=zip
). Cada entrada pode ser uma string de URL ou um objeto com os campos:
url
: URL para baixar arquivopath
: armazenar arquivo neste caminho no ZIP
[{ "url": "https://host/asset.jpg", "path": "folder/location/asset.jpg" }]
duplicate
string
fmt=zip
). Por padrão, vários arquivos armazenados no mesmo caminho no ZIP geram um erro. Configurar duplicate
como ignore
resulta somente no primeiro ativo a ser armazenado e no restante a ser ignorado.ignore
Campos específicos de marca d'água watermark-specific-fields
O formato PNG é usado como marca d'água.
scale
number
0.0
e 1.0
. 1.0
significa que a marca d'água tem sua escala original (1:1) e os valores mais baixos reduzem o tamanho da marca d'água.0.5
significa metade do tamanho original.image
url
Eventos assíncronos asynchronous-events
Quando o processamento de uma representação for concluído ou quando ocorrer um erro, um evento será enviado para um Adobe I/O Events Journal
. Os clientes devem escutar a URL do diário fornecida por meio de /register
. A resposta do diário inclui uma matriz event
que consiste em um objeto para cada evento, do qual o campo event
inclui a carga do evento real.
O tipo de Adobe I/O Events
para todos os eventos de Asset Compute Service é asset_compute
. O diário é inscrito automaticamente apenas neste tipo de evento e não há mais nenhum requisito para filtrar com base no tipo de Evento Adobe Developer. Os tipos de evento específicos do serviço estão disponíveis na propriedade type
do evento.
Tipos de evento event-types
rendition_created
rendition_failed
Atributos do evento event-attributes
date
string
*
requestId
string
*
/process
, igual ao cabeçalho X-Request-Id
.source
object
*
source
da solicitação /process
.userData
object
*
userData
da representação da solicitação /process
, se definida.rendition
object
rendition_*
/process
.errorMessage
string
rendition_failed
Metadados metadata
repo:size
repo:sha1
dc:format
repo:encoding
tiff:ImageWidth
tiff:ImageLength
Motivos de erro error-reasons
RenditionFormatUnsupported
SourceUnsupported
SourceCorrupt
RenditionTooLarge
target
. O tamanho de representação real está disponível como metadados em repo:size
e é usado pelo cliente para processar novamente essa representação com o número correto de URLs pré-assinadas.GenericError