L'API HTTP Assets include:
L'implementazione corrente di API HTTP AEM Assets è REST.
Adobe Experience Manager (AEM) Assets REST API consente agli sviluppatori di accedere al contenuto (memorizzato in AEM) direttamente tramite l'API HTTP, tramite operazioni CRUD (Crea, Leggi, Aggiorna, Elimina).
L'API consente di utilizzare AEM come CMS headless (Content Management System) fornendo Content Services a un'applicazione front-end JavaScript. Oppure qualsiasi altra applicazione in grado di eseguire richieste HTTP e gestire le risposte JSON.
Ad esempio, le applicazioni per pagina singola (SPA), basate su framework o personalizzate, richiedono il contenuto fornito tramite l'API HTTP, spesso in formato JSON.
I componenti core AEM forniscono un'API molto completa, flessibile e personalizzabile che può servire le operazioni di lettura necessarie a questo scopo, e il cui output JSON può essere personalizzato, ma richiedono AEM know-how WCM (Web Content Management) per l'implementazione, in quanto devono essere ospitati in pagine (API) basate su modelli AEM dedicati. Non tutte SPA organizzazioni di sviluppo hanno accesso a tali risorse.
Questo è il momento in cui è possibile utilizzare l'API REST di Risorse. Consente agli sviluppatori di accedere direttamente alle risorse (ad esempio, immagini e frammenti di contenuto), senza dover prima incorporarle in una pagina e distribuire i contenuti in formato JSON serializzato. (Non è possibile personalizzare l'output JSON dall'API REST di Assets). L’API REST di Risorse consente inoltre agli sviluppatori di modificare il contenuto, creando nuove risorse, aggiornando o eliminando risorse esistenti, frammenti di contenuto e cartelle.
API REST di Risorse:
L’API REST di Assets è disponibile per ogni installazione out-of-the-box di una versione AEM recente.
L'API REST di Risorse offre l'accesso stile REST alle risorse memorizzate in un'istanza AEM. Utilizza l'endpoint /api/assets
e richiede il percorso della risorsa per accedervi (senza l'endpoint /content/dam
iniziale).
Il metodo HTTP determina l’operazione da eseguire:
Il corpo della richiesta e/o i parametri URL possono essere utilizzati per configurare alcune di queste operazioni; ad esempio, definite che una cartella o una risorsa debba essere creata da una richiesta POST.
Il formato esatto delle richieste supportate è definito nella documentazione Riferimento API.
Tutte le richieste sono atomiche.
Ciò significa che le richieste successive (write
) non possono essere combinate in una singola transazione che potrebbe avere esito positivo o negativo come singola entità.
Aspetto | API REST di Assets |
AEM Component (componenti che utilizzano i modelli Sling) |
Casi d’uso supportati | Scopo generale. | Ottimizzato per il consumo in un'applicazione (SPA) a pagina singola o in qualsiasi altro contesto (che utilizza contenuti). Può anche contenere informazioni sul layout. |
Operazioni supportate | Crea, Leggi, Aggiorna, Elimina. Con operazioni aggiuntive in base al tipo di entità. |
Sola lettura. |
Accesso | È accessibile direttamente. Utilizza l'endpoint Ad esempio, per accedere alla richiesta: |
È necessario fare riferimento a un componente AEM in una pagina AEM. Utilizza il selettore Esempio di URL: |
Sicurezza | Sono possibili più opzioni. Si propone l'OAuth; può essere configurato separatamente dalla configurazione standard. |
Utilizza AEM configurazione standard. |
Osservazioni architettoniche | In genere, l'accesso in scrittura viene indirizzato a un'istanza di creazione. La lettura può essere diretta anche a un’istanza di pubblicazione. |
Poiché questo approccio è di sola lettura, in genere viene utilizzato per le istanze di pubblicazione. |
Output | Uscita SIREN basata su JSON: verboso, ma potente. Consente di spostarsi all'interno del contenuto. | output proprietario basato su JSON; configurabile tramite Sling Models. Navigare nella struttura del contenuto è difficile da implementare (ma non necessariamente impossibile). |
Se l'API REST di Assets è utilizzata in un ambiente senza requisiti di autenticazione specifici, AEM filtro CORS deve essere configurato correttamente.
Per ulteriori informazioni, consulta:
Negli ambienti con requisiti di autenticazione specifici, è consigliabile OAuth.
I frammenti di contenuto sono un tipo specifico di risorsa. Consultate Utilizzo dei frammenti di contenuto.
Per ulteriori informazioni sulle funzioni disponibili tramite l'API, vedete:
L’API REST di Assets supporta il paging (per richieste di GET) tramite i parametri URL:
offset
- il numero della prima entità (figlio) da recuperarelimit
- il numero massimo di entità restituiteLa risposta conterrà informazioni di paging come parte della sezione properties
dell'output SIREN. Questa proprietà srn:paging
contiene il numero totale di entità (secondarie) ( total
), l'offset e il limite ( offset
, limit
) come specificato nella richiesta.
Le pagine vengono in genere applicate alle entità contenitore (ovvero alle cartelle o alle risorse con rappresentazioni), in quanto si riferiscono agli elementi secondari dell'entità richiesta.
GET /api/assets.json?offset=2&limit=3
...
"properties": {
...
"srn:paging": {
"total": 7,
"offset": 2,
"limit": 3
}
...
}
...
Le cartelle fungono da contenitori per risorse e altre cartelle. che riflettono la struttura dell'archivio dei contenuti AEM.
L’API REST di Assets espone l’accesso alle proprietà di una cartella; ad esempio nome, titolo, ecc. Le risorse sono esposte come entità figlie di cartelle.
A seconda del tipo di risorsa, l'elenco di entità figlio potrebbe già contenere l'intero set di proprietà che definisce la rispettiva entità figlio. In alternativa, solo una serie ridotta di proprietà può essere esposta per un'entità in questo elenco di entità figlio.
Se viene richiesta una risorsa, la risposta restituirà i relativi metadati; come titolo, nome e altre informazioni, come definite dallo schema delle risorse corrispondenti.
I dati binari di una risorsa sono esposti come collegamento SIREN di tipo content
(noto anche come rel attribute
).
Le risorse possono avere più rappresentazioni. Questi sono in genere esposti come entità figlie, una delle quali è una rappresentazione in miniatura, che viene esposta come un collegamento di tipo thumbnail
( rel="thumbnail"
).
Un frammento di contenuto è un tipo speciale di risorsa. Possono essere utilizzati per accedere a dati strutturati, come testi, numeri, date, ecc.
Poiché le risorse standard (come immagini o audio) presentano diverse differenze, per gestirle è necessario applicare alcune regole aggiuntive.
Frammenti di contenuto:
Non esporre dati binari.
Sono completamente contenuti nell'output JSON (all'interno della proprietà properties
).
Sono anche considerati atomici, ovvero gli elementi e le variazioni sono esposti come parte delle proprietà del frammento rispetto a come collegamenti o entità figlio. Questo consente un accesso efficiente al payload di un frammento.
Attualmente i modelli che definiscono la struttura di un frammento di contenuto non sono esposti tramite un'API HTTP. Pertanto, il consumer deve conoscere il modello di un frammento (almeno un minimo), sebbene la maggior parte delle informazioni possa essere ricavata dal payload; come tipi di dati, ecc. fanno parte della definizione.
Per creare un nuovo frammento di contenuto, è necessario fornire il percorso (archivio interno).
Il contenuto associato al momento non è esposto.
L’utilizzo può variare a seconda se usate un ambiente di authoring o pubblicazione AEM e se usate un caso d’uso specifico.
La creazione è strettamente legata a un'istanza di autore (e attualmente non esiste alcun modo per replicare un frammento da pubblicare utilizzando questa API).
La consegna è possibile da entrambi, in quanto AEM il contenuto richiesto solo in formato JSON.
La configurazione del dispatcher AEM istanze cloud potrebbe bloccare l'accesso a /api
.
Per ulteriori dettagli, vedere Riferimento API. In particolare, Adobe Experience Manager Assets API - Content Fragments.
Utilizzo tramite:
GET /{cfParentPath}/{cfName}.json
Esempio:
https://localhost:4502/api/assets/we-retail/en/experiences/arctic-surfing-in-lofoten.json
La risposta è JSON serializzata con il contenuto strutturato come nel frammento di contenuto. I riferimenti vengono forniti come URL di riferimento.
Sono possibili due tipi di operazioni di lettura:
Utilizzo tramite:
POST /{cfParentPath}/{cfName}
Il corpo deve contenere una rappresentazione JSON del frammento di contenuto da creare, incluso qualsiasi contenuto iniziale da impostare sugli elementi del frammento di contenuto. È obbligatorio impostare la proprietà cq:model
e puntare a un modello di frammento di contenuto valido. In caso contrario si verificherà un errore. È inoltre necessario aggiungere un'intestazione Content-Type
impostata su application/json
.
Utilizzo tramite
PUT /{cfParentPath}/{cfName}
Il corpo deve contenere una rappresentazione JSON di ciò che deve essere aggiornato per il frammento di contenuto specificato.
Può trattarsi semplicemente del titolo o della descrizione di un frammento di contenuto, di un singolo elemento o di tutti i valori e/o metadati dell'elemento. È inoltre obbligatorio fornire una proprietà cq:model
valida per gli aggiornamenti.
Utilizzo tramite:
DELETE /{cfParentPath}/{cfName}
Esistono alcuni limiti:
Le varianti non possono essere scritte e aggiornate. Se tali varianti vengono aggiunte a un payload (ad es. per gli aggiornamenti), verranno ignorate. Tuttavia, la variante verrà servita tramite consegna ( GET
).
I modelli di frammento di contenuto non sono attualmente supportati: non possono essere letti o creati. Per poter creare un nuovo frammento di contenuto o aggiornarne uno esistente, gli sviluppatori devono conoscere il percorso corretto del modello di frammento di contenuto. Attualmente l’unico metodo per ottenere una panoramica di questi metodi è tramite l’interfaccia utente di amministrazione.
I riferimenti vengono ignorati. Al momento non è disponibile alcun controllo per verificare se a un frammento di contenuto esistente viene fatto riferimento. Pertanto, ad esempio, l'eliminazione di un frammento di contenuto potrebbe causare problemi in una pagina che contiene un riferimento.
I seguenti codici di stato possono essere visti nelle circostanze pertinenti:
200 (OK)
Restituito quando:
richiesta di un frammento di contenuto tramite GET
aggiornamento di un frammento di contenuto tramite PUT
201 (Creato)
Restituito quando:
POST
404 (non trovato)
Restituito quando:
500 (errore interno del server)
Questo errore viene restituito:
Di seguito sono elencati gli scenari più comuni in cui viene restituito questo stato di errore, insieme al messaggio di errore (spaziatura fissa) generato:
La cartella principale non esiste (durante la creazione di un frammento di contenuto tramite POST
)
Non viene fornito alcun modello di frammento di contenuto (valore null), la risorsa è null (potenziale problema di autorizzazione) o la risorsa non è un modello di frammento valido:
No content fragment model specified
Cannot create a resource of given model '/foo/bar/qux'
Cannot adapt the resource '/foo/bar/qux' to a content fragment template
Impossibile creare il frammento di contenuto (potenziale problema di autorizzazione):
Could not create content fragment
Impossibile aggiornare il titolo e la descrizione:
Could not set value on content fragment
Impossibile impostare i metadati:
Could not set metadata on content fragment
Impossibile trovare l'elemento di contenuto o aggiornarlo
Could not update content element
Could not update fragment data of element
I messaggi di errore dettagliati vengono in genere restituiti nel modo seguente:
{
"class": "core/response",
"properties": {
"path": "/api/assets/foo/bar/qux",
"location": "/api/assets/foo/bar/qux.json",
"parentLocation": "/api/assets/foo/bar.json",
"status.code": 500,
"status.message": "...{error message}.."
}
}
Consultate qui per riferimenti API dettagliati:
Per ulteriori informazioni, consulta: