Show Menu
主题×

AEM Assets HTTP API中的内容片段支持

概述

  • 资产REST API
  • 包括对内容片段的支持
Assets HTTP API的当前实现基于 REST体系结 构样式。
Assets 资产 HTTP API REST API允许Adobe Experience Manager作为云服务的开发人员通过CRUD操作(创建、读取、更新、删除)直接通过HTTP API访问内容(存储在AEM中)。
该API允许您通过向JavaScript前端应用程序提供内容服务,将Adobe Experience Manager作为无外设CMS(内容管理系统)的云服务进行操作。 或可以执行HTTP请求和处理JSON响应的任何其他应用程序。
例如,单页应用程序(SPA)、基于框架或自定义,需要通过HTTP API提供的内容,通常采用JSON格式。
虽然 AEM核心组件提供了一个非常全面、灵活且可自定义的API ,它可以为此目的提供所需的读取操作,并且其JSON输出可以自定义,但它们的确需要AEM WCM(Web内容管理)专门技术来实现,因为它们必须在基于专用AEM模板的页面中托管。 并非每个SPA开发组织都能直接获得此类知识。
此时,可以使用资产REST API。 它允许开发人员直接访问资产(例如,图像和内容片段),无需先将资产嵌入到页面中,然后以序列化JSON格式交付其内容。
无法从Assets REST API自定义JSON输出。
Assets REST API还允许开发人员通过创建新资产、更新或删除现有资产、内容片段和文件夹来修改内容。
资产REST API:

前提条件

Assets REST API可用于近期Adobe Experience Manager作为云服务版本的每次开箱即用安装。

重要概念

资产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
访问:
  • /api/assets 需要 ,请使用选择 .model 器。
  • /content/assets 需要使用选择 .model 器。
HTTP方法确定要执行的操作:
  • GET —— 检索资产或文件夹的JSON表示法
  • POST —— 创建新资产或文件夹
  • PUT —— 更新资产或文件夹的属性
  • 删除 -删除资产或文件夹
请求体和/或URL参数可用于配置其中的一些操作;例如,定义文件夹或资产应由 POST请求创建

交易行为

所有请求都是原子的。
这意味着,后续( write )请求不能合并到单个实体可能成功或失败的单个事务中。

AEM(Assets)REST API与AEM组件

长宽比 资产REST API AEM组件 (使用Sling Models的组件)
支持的用例 一般用途。
针对单页应用程序(SPA)或任何其他(内容消耗)上下文中的使用情况进行了优化。
还可以包含布局信息。
支持的操作
创建、读取、更新、删除。
根据实体类型使用其他操作。
只读.
访问
可以直接访问。
使用映射 /api/assets 到(在存储库中) /content/dam 的端点。
示例路径如下: /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 Models进行配置。 导航内容结构很难实现(但不一定不可能)。

安全

如果在环境中使用资产REST API时没有特定的身份验证要求,则需要正确配置AEM的CORS过滤器。
对于具有特定身份验证要求的环境,建议使用OAuth。

可用功能

内容片段是资产的一种特定类型,请参阅 使用内容片段
有关通过API提供的功能的更多信息,请参阅:

分页

资产REST API支持通过URL参数进行分页(对于GET请求):
  • offset -要检索的第一个(子)实体的数量
  • limit -返回的最大实体数
响应将包含作为SIREN输出部分的一 properties 部分的寻呼信息。 此属 srn:paging 性包含请求中指定的(子)实体( total )总数、偏移量和限制( offset , limit )。
分页通常应用于容器实体(即,与所请求实体的子实体相关的文件夹或具有演绎版的资产)。

示例:分页

GET /api/assets.json?offset=2&limit=3
...
"properties": {
    ...
    "srn:paging": {
        "total": 7,
        "offset": 2,
        "limit": 3
    }
    ...
}
...

实体类型

文件夹

文件夹用作资产和其他文件夹的容器。 它们反映了AEM内容存储库的结构。
资产REST API公开了对文件夹属性的访问权;例如,其名称、标题等。 资产会作为文件夹的子实体和子文件夹公开。
根据子资产和文件夹的资产类型,子实体的列表可能已包含定义相应子实体的完整属性集。 或者,在子实体的这一列表中,只能为实体公开缩减的属性集。

资产

如果请求资产,响应将返回其元数据;如标题、名称和由相关资产模式定义的其他信息。
资产的二进制数据会作为类型(也称为 content SIREN)的SIREN链接公 rel attribute 开。
资产可以有多个演绎版。 这些属性通常作为子实体公开,一个例外是缩略图再现,它作为类型()的链接公 thumbnail rel="thumbnail"

内容片段

容片段 ,是一种特殊类型的资产。 它们可用于访问结构化数据,例如文本、数字、日期等。
由于标准资产(如图 或音频)存在若干差异,因此处理这些资产时会应用一些其他规则。

表示法

内容片段:
  • 请勿公开任何二进制数据。
  • 完全包含在JSON输出中(在属 properties 性中)。
  • 也被视为原子,即元素和变量作为片段属性的一部分而暴露,而作为链接或子实体。 这允许有效访问片段的有效负荷。

内容模型和内容片段

目前,定义内容片段结构的模型不会通过HTTP API公开。 因此, 消费者需要 了解片段的模型(至少是最小值)—尽管大多数信息可以从有效负荷推断出来;数据类型等。 是定义的一部分。
要创建新内容片段,必须提供模型的(内部存储库)路径。

关联的内容

关联的内容当前未公开。

使用

使用情况可能因您使用的是AEM作者环境还是发布环境以及特定用例而异。
  • 创建严格绑定到作者实例( 目前没有方法使用此API将片段复制到发布 )。
  • 投放可以同时从两者进行,因为AEM仅以JSON格式提供请求的内容。
    • AEM作者实例的存储和投放应足以支持防火墙后的媒体库应用程序。
    • 对于实时Web投放,建议使用AEM发布实例。
AEM云实例上的调度程序配置可能会阻止对的访 /api 问。

读取/投放

使用方式:
GET /{cfParentPath}/{cfName}.json
例如:
http://<host>/api/assets/wknd/en/adventures/cycling-tuscany.json
响应是序列化JSON,其内容结构如内容片段中所示。 引用作为引用URL提供。
可以执行两种类型的读取操作:
  • 按路径读取特定内容片段,这将返回内容片段的JSON表示形式。
  • 按路径读取内容片段的文件夹:这将返回文件夹内所有内容片段的JSON表示形式。

创建

使用方式:
POST /{cfParentPath}/{cfName}
主体必须包含要创建的内容片段的JSON表示形式,包括应在内容片段元素上设置的任何初始内容。 必须设置属性, cq:model 并且必须指向有效的内容片段模型。 否则将导致错误。 还必须添加设置为 Content-Type 的标题 application/json

更新

使用方式
PUT /{cfParentPath}/{cfName}
主体必须包含要为给定内容片段更新的内容的JSON表示形式。
这可以只是内容片段的标题或描述,或单个元素,或所有元素值和/或元数据。

删除

使用方式:
DELETE /{cfParentPath}/{cfName}

限制

存在一些限制:
  • 无法编写和更新变体。 如果将这些变量添加到有效负荷(例如,对于更新),则忽略它们。 但是,变体将通过投放( GET )提供。
  • 当前不支持内容片段模型 :无法读取或创建它们。 要能够创建新内容片段或更新现有内容片段,开发人员必须知道内容片段模型的正确路径。 目前,只有通过管理UI才能获得这些内容的概述。
  • 将忽略引用 。 当前不检查是否引用了现有内容片段。 因此,例如,删除内容片段可能会导致页面上出现包含对已删除内容片段的引用的问题。

状态代码和错误消息

在相关情况下可以看到以下状态代码:
  1. 200(确定)
    返回时间:
    • 通过 GET
    • 通过 PUT
  2. 2010年(创建)
    返回时间:
    • 通过 POST
  3. 404(未找到)
    返回时间:
    • 请求的内容片段不存在
  4. 500(内部服务器错误)
    此错误返回:
    • 当发生了无法用特定代码识别的错误时
    • 当给定的有效负荷无效时
    以下列表了返回此错误状态时的常见情况以及生成的错误消息(等宽):
    • 父文件夹不存在(通过创建内容片段时 POST )
    • 未提供内容片段模型(cq:model缺失),无法读取(由于路径无效或权限问题),或者没有有效的片段模型/模板:
      • 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
    • 无法创建内容片段(可能是权限问题):
      • 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
    详细的错误消息通常按以下方式返回:
    {
      "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 Reference

有关详细的API参考,请参阅此处:

其他资源

有关更多信息,请参阅: