AEM Assets HTTP API의 콘텐츠 조각 지원 content-fragments-support-in-aem-assets-http-api

버전
문서 링크
AEM as a Cloud Service
여기 클릭
AEM 6.5
이 문서

개요 overview

AEM의 Headless 게재 기능의 중요한 부분인 Assets HTTP API에서의 콘텐츠 조각 지원에 대해 알아봅니다.

NOTE
Assets HTTP API는 다음을 포함합니다.
  • Assets REST API
  • 콘텐츠 조각의 지원 포함
Assets HTTP API의 현재 구현은 REST 아키텍처 스타일을 기반으로 합니다.

Assets REST API를 사용하면 Adobe Experience Manager의 개발자가 CRUD(만들기, 읽기, 업데이트, 삭제) 작업을 통해 HTTP API를 통해 직접 콘텐츠(AEM에 저장됨)에 액세스할 수 있습니다.

API를 사용하면 JavaScript 프론트엔드 애플리케이션에 컨텐츠 서비스를 제공하여 Adobe Experience Manager as a Headless CMS(컨텐츠 관리 시스템)를 운영할 수 있습니다. 또는 HTTP 요청을 실행하고 JSON 응답을 처리할 수 있는 다른 모든 애플리케이션.

예를 들어 프레임워크 기반 또는 사용자 지정 SPA(단일 페이지 애플리케이션)에서는 HTTP API를 통해 제공되는 콘텐츠(종종 JSON 형식)가 필요합니다.

AEM 핵심 구성 요소는 이 용도로 필요한 읽기 작업을 수행하고 JSON 출력을 사용자 지정할 수 있는 매우 포괄적이고 유연하며 사용자 지정 가능한 API를 제공하지만 전용 AEM 템플릿을 기반으로 하는 페이지에서 호스팅해야 하므로 구현에 AEM WCM(웹 콘텐츠 관리) 노하우가 필요합니다. 모든 SPA 개발 조직이 이러한 지식에 직접 액세스할 수 있는 것은 아닙니다.

이때 Assets REST API를 사용할 수 있습니다. 이를 통해 개발자는 페이지에 에셋을 먼저 임베드할 필요 없이 에셋(예: 이미지 및 콘텐츠 조각)에 직접 액세스하고 콘텐츠를 직렬화된 JSON 형식으로 전달할 수 있습니다.

NOTE
Assets REST API에서 JSON 출력을 사용자 정의할 수 없습니다.

Assets REST API를 사용하면 개발자가 기존 에셋, 콘텐츠 조각 및 폴더를 새로 만들거나 업데이트하거나 삭제하여 콘텐츠를 수정할 수도 있습니다.

Assets REST API:

사전 요구 사항 prerequisites

Assets REST API는 최신 AEM 버전의 각 기본 설치에서 사용할 수 있습니다.

주요 개념 key-concepts

Assets REST API는 AEM 인스턴스 내에 저장된 자산에 대한 REST 스타일 액세스를 제공합니다.

/api/assets 끝점을 사용하며 자산 경로를 사용하여 액세스합니다(선행 /content/dam 없음).

  • 즉, 다음 위치에서 자산에 액세스할 수 있습니다.
    • /content/dam/path/to/asset
  • 다음을 요청해야 합니다.
    • /api/assets/path/to/asset

예를 들어 /content/dam/wknd/en/adventures/cycling-tuscany에 액세스하기 위해 /api/assets/wknd/en/adventures/cycling-tuscany.json을 요청합니다.

NOTE
다음을 통한 액세스:
  • /api/assets.model 선택기 사용이 필요하지 않습니다.
  • /content/path/to/page.model 선택기 사용이 필요​ 합니다.

HTTP 메서드는 실행할 작업을 결정합니다.

  • GET - 자산 또는 폴더의 JSON 표현식 검색
  • POST - 새 자산 또는 폴더 만들기
  • PUT - 자산 또는 폴더의 속성 업데이트
  • DELETE - 자산 또는 폴더 삭제
NOTE
요청 본문 및/또는 URL 매개변수를 사용하여 해당 작업 중 일부를 구성할 수 있습니다(예: POST 요청에 의해 폴더 또는 자산이 생성될 수 있도록 정의).

지원되는 요청의 정확한 형식은 API 참조 설명서에 정의되어 있습니다.

트랜잭션 동작 transactional-behavior

모든 요청은 원자입니다.

즉, 후속(write) 요청은 단일 엔터티로 성공하거나 실패할 수 있는 단일 트랜잭션으로 결합할 수 없습니다.

AEM(Assets) REST API 및 AEM 구성 요소 aem-assets-rest-api-versus-aem-components

Aspect
Assets REST API
AEM 구성 요소
(Sling 모델을 사용하는 구성 요소)
지원되는 사용 사례
일반적인 목적.

단일 페이지 애플리케이션(SPA) 또는 기타(콘텐츠 소비) 컨텍스트에서 사용하도록 최적화되었습니다.

레이아웃 정보를 포함할 수도 있습니다.

지원되는 작업

만들기, 읽기, 업데이트, 삭제.

엔터티 유형에 따라 추가 작업 포함

읽기 전용.
액세스

직접 액세스할 수 있습니다.

리포지토리의 /content/dam에 매핑된 /api/assets 끝점을 사용합니다.

예제 경로는 다음과 같습니다. /api/assets/wknd/en/adventures/cycling-tuscany.json

AEM 페이지에서 AEM 구성 요소를 통해 참조되어야 합니다.

.model 선택기를 사용하여 JSON 표현을 만듭니다.

예제 경로는 다음과 같습니다.
/content/wknd/language-masters/en/adventures/cycling-tuscany.model.json

보안

여러 옵션이 가능합니다.

OAuth가 제안됩니다. 표준 설정과 별도로 구성할 수 있습니다.

AEM의 표준 설정을 사용합니다.
아키텍처 설명

쓰기 액세스는 일반적으로 작성자 인스턴스를 해결합니다.

읽기는 게시 인스턴스로 진행될 수도 있습니다.

이 접근 방식은 읽기 전용이므로 일반적으로 게시 인스턴스에 사용됩니다.
출력
JSON 기반 SIREN 출력: 자세한 정보지만 강력한. 콘텐츠 내에서 탐색할 수 있습니다.
JSON 기반 소유 출력, Sling 모델을 통해 구성 가능. 콘텐츠 구조를 탐색하는 것은 구현하기 어렵습니다(하지만 반드시 불가능하지는 않음).

보안 security

Assets REST API가 특정 인증 요구 사항 없이 환경 내에서 사용되는 경우 AEM의 CORS 필터를 올바르게 구성해야 합니다.

NOTE
자세한 내용은 다음을 참조하십시오.

특정 인증 요구 사항이 있는 환경에서는 OAuth가 권장됩니다.

사용 가능한 기능 available-features

콘텐츠 조각은 특정 유형의 자산입니다. 콘텐츠 조각을 사용하여 작업을 참조하세요.

API를 통해 사용할 수 있는 기능에 대한 자세한 내용은 다음을 참조하십시오.

페이징 paging

Assets REST API는 URL 매개 변수를 통해 (GET 요청에 대한) 페이징을 지원합니다.

  • offset - 검색할 첫 번째(하위) 엔티티 수
  • limit - 반환되는 최대 엔터티 수

응답에는 SIREN 출력의 properties 섹션의 일부로 페이징 정보가 포함됩니다. 이 srn:paging 속성에는 요청에 지정된 총 (하위) 엔티티 수(total), 오프셋 및 제한(offset, limit)이 포함됩니다.

NOTE
페이징은 요청된 엔티티의 하위 항목과 관련이 있으므로 일반적으로 컨테이너 엔티티(렌디션이 있는 폴더 또는 에셋)에 적용됩니다.

예: 페이징 example-paging

GET /api/assets.json?offset=2&limit=3

...
"properties": {
    ...
    "srn:paging": {
        "total": 7,
        "offset": 2,
        "limit": 3
    }
    ...
}
...

엔티티 유형 entity-types

폴더 folders

폴더는 에셋 및 기타 폴더의 컨테이너 역할을 합니다. 이는 AEM 콘텐츠 저장소의 구조를 반영합니다.

Assets REST API는 이름, 제목 등과 같은 폴더의 속성에 대한 액세스를 노출합니다. Assets은 폴더 및 하위 폴더의 하위 엔티티로 노출됩니다.

NOTE
하위 에셋 및 폴더의 에셋 유형에 따라 하위 엔티티 목록에는 각 하위 엔티티를 정의하는 전체 속성 세트가 이미 포함되어 있을 수 있습니다. 대안적으로, 이러한 자식 엔티티들의 목록에 있는 엔티티에 대해 감소된 속성 세트만이 노출될 수 있다.

자산 assets

에셋이 요청되면 응답은 해당 에셋 스키마에서 정의한 제목, 이름 및 기타 정보와 같은 메타데이터를 반환합니다.

자산의 이진 데이터가 content 유형의 SIREN 링크로 노출됩니다.

Assets에는 여러 표현물이 있을 수 있습니다. 일반적으로 자식 엔터티로 노출됩니다. 한 가지 예외는 썸네일 렌디션으로, thumbnail(rel="thumbnail") 형식의 링크로 노출됩니다.

콘텐츠 조각 content-fragments

콘텐츠 조각은(는) 특별한 유형의 자산입니다. 텍스트, 숫자, 날짜 등 구조화된 데이터에 액세스하는 데 사용할 수 있습니다.

표준 자산(예: 이미지 또는 오디오)에 몇 가지 차이점이 있으므로 이를 처리하는 데 일부 추가 규칙이 적용됩니다.

표시 representation

컨텐츠 조각:

  • 이진 데이터를 노출하지 마십시오.

  • JSON 출력(properties 속성 내)에 완전히 포함되어 있습니다.

  • 요소 및 변형은 조각의 속성 또는 링크 또는 하위 엔티티의 일부로 노출되므로 원자로도 간주됩니다. 이를 통해 조각의 페이로드에 효율적으로 액세스할 수 있습니다.

콘텐츠 모델 및 콘텐츠 조각 content-models-and-content-fragments

현재 콘텐츠 조각의 구조를 정의하는 모델은 HTTP API를 통해 노출되지 않습니다. 따라서 consumer ​은(는) 페이로드에서 대부분의 정보를 데이터 형식 등으로 유추할 수 있지만 최소한 조각 모델에 대해 알고 있어야 합니다. 정의의 일부입니다.

콘텐츠 조각을 만들려면 모델의 (내부 저장소) 경로를 제공해야 합니다.

관련 콘텐츠 associated-content

연결된 콘텐츠는 현재 노출되지 않습니다.

사용 using

사용량은 특정 사용 사례와 함께 AEM 작성자 또는 게시 환경 사용 여부에 따라 다를 수 있습니다.

CAUTION
AEM 인스턴스의 Dispatcher 구성이 /api에 대한 액세스를 차단할 수 있습니다.
NOTE
자세한 내용은 API 참조를 참조하십시오. 특히, Adobe Experience Manager Assets API - 콘텐츠 조각.

읽기/게재 read-delivery

사용은 다음을 통해서입니다.

GET /{cfParentPath}/{cfName}.json

예:

http://<host>/api/assets/wknd/en/adventures/cycling-tuscany.json

응답은 콘텐츠 조각에서와 같이 구조화된 콘텐츠가 있는 직렬화된 JSON입니다. 참조 URL로 참조를 게재합니다.

다음과 같이 두 가지 유형의 읽기 작업이 가능합니다.

  • 경로를 통해 특정 콘텐츠 조각을 읽으면 콘텐츠 조각의 JSON 표현식이 반환됩니다.
  • 경로를 통해 콘텐츠 조각의 폴더 읽기: 폴더 내 모든 콘텐츠 조각의 JSON 표현식이 반환됩니다.

만들기 create

사용은 다음을 통해서입니다.

POST /{cfParentPath}/{cfName}

본문에는 콘텐츠 조각 요소에 설정해야 하는 초기 콘텐츠를 비롯해 생성할 콘텐츠 조각의 JSON 표현식이 포함되어야 합니다. cq:model 속성 설정이 필수이며 유효한 콘텐츠 조각 모델을 지정해야 합니다. 지정하지 못하면 오류가 발생합니다. 또한 application/json으로 설정된 헤더 Content-Type을 추가해야 합니다.

업데이트 update

사용은 다음을 통해서입니다.

PUT /{cfParentPath}/{cfName}

본문에는 특정 콘텐츠 조각에 업데이트할 항목의 JSON 표현식이 포함되어야 합니다.

이는 간단히 콘텐츠 조각의 제목이나 설명 또는 단일 요소나 모든 요소 값 및/또는 메타데이터일 수 있습니다.

삭제 delete

사용은 다음을 통해서입니다.

DELETE /{cfParentPath}/{cfName}

제한 사항 limitations

몇 가지 제한 사항이 있습니다.

  • 콘텐츠 조각 모델은 현재 지원되지 않습니다: 읽거나 만들 수 없습니다. 콘텐츠 조각을 만들거나 기존 콘텐츠 조각을 업데이트하려면 개발자가 콘텐츠 조각 모델에 대한 올바른 경로를 알고 있어야 합니다. 현재 이러한 기능에 대한 개요를 얻는 유일한 방법은 관리 UI를 사용하는 것입니다.
  • 참조가 무시됩니다. 현재 기존 콘텐츠 조각이 참조되는지 여부에 대한 검사가 없습니다. 따라서 예를 들어 콘텐츠 조각을 삭제하면 삭제된 콘텐츠 조각에 대한 참조가 포함된 페이지에 문제가 발생할 수 있습니다.
  • JSON 데이터 형식 JSON 데이터 형식 ​의 REST API 출력은 현재 문자열 기반 출력 ​입니다.

상태 코드 및 오류 메시지 status-codes-and-error-messages

관련 상황에서 다음 상태 코드를 볼 수 있습니다.

  • 200(확인)
    다음과 같은 경우에 반환됨:

    • GET을(를) 통해 콘텐츠 조각 요청
    • PUT을(를) 통해 콘텐츠 조각을 업데이트했습니다.
  • 201(생성됨)
    다음과 같은 경우에 반환됨:

    • POST을(를) 통해 콘텐츠 조각을 만들었습니다.
  • 404(찾을 수 없음)
    다음과 같은 경우에 반환됨:

    • 요청한 콘텐츠 조각이 존재하지 않습니다.
  • 500(내부 서버 오류)

    note note
    NOTE
    이 오류가 반환됩니다.
    • 특정 코드로 식별할 수 없는 오류가 발생한 경우
    • 지정된 페이로드가 유효하지 않은 경우

    다음은 생성된 오류 메시지(단공간)와 함께 이 오류 상태가 반환될 때의 일반적인 시나리오를 나열합니다.

    • 상위 폴더가 없습니다(POST을(를) 통해 콘텐츠 조각을 만드는 경우).

    • 제공된 콘텐츠 조각 모델이 없거나(cq:model이 누락됨), 잘못된 경로 또는 권한 문제로 인해 읽을 수 없거나, 유효한 조각 모델이 없습니다.

      • No content fragment model specified
      • Cannot create a resource of given model '/foo/bar/qux'
    • 콘텐츠 조각을 만들 수 없습니다(권한 문제일 수 있음).

      • Could not create content fragment
    • 제목 및/또는 설명을 업데이트할 수 없습니다.

      • Could not set value on content fragment
    • 메타데이터를 설정할 수 없음:

      • Could not set metadata on content fragment
    • 콘텐츠 요소를 찾을 수 없거나 업데이트할 수 없습니다.

      • Could not update content element
      • Could not update fragment data of element

    자세한 오류 메시지는 일반적으로 다음과 같은 방식으로 반환됩니다.

    code language-xml
    {
      "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}.."
      }
    }
    

API 참조 api-reference

자세한 API 참조는 여기를 참조하십시오.

추가 리소스 additional-resources

자세한 내용은 다음을 참조하십시오.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2