Assets HTTP API允许对数字资产(包括元数据、演绎版和注释)以及使用Experience Manager内容片段的结构化内容执行创建——读取——更新——删除(CRUD)操作。 它在/api/assets
上公开,并作为REST API实现。 它包含对内容片段的支持。
访问API:
https://[hostname]:[port]/api.json
的API服务文档。https://[hostname]:[server]/api/assets.json
。API响应是某些MIME类型的JSON文件和所有MIME类型的响应代码。 JSON响应是可选的,可能不可用,例如PDF文件。 依赖响应代码进行进一步的分析或操作。
在结束时间后,资产及其演绎版不能通过Assets Web界面和HTTP API使用。 如果开机时间在将来或结束时间在过去,则API返回404错误消息。
HTTP API更新命名空间 中的元数据 jcr
属性。但是,Experience Manager用户界面会更新dc
命名空间中的元数据属性。
内容片段是一种特殊的资产类型。 它可用于访问结构化数据,如文本、数字、日期等。 由于standard
资产(如图像或文档)存在若干差异,因此处理内容片段时还会应用一些其他规则。
有关详细信息,请参阅Experience Manager资产HTTP API](/docs/experience-manager-65/assets/extending/assets-api-content-fragments.html?lang=zh-Hans)中的[内容片段支持。
Assets HTTP API公开两个主要元素、文件夹和资产(对于标准资产)。
此外,它还针对描述内容片段中结构化内容的自定义数据模型显示更详细的元素。 有关详细信息,请参阅内容片段数据模型。
文件夹类似于传统文件系统中的目录。 它们是其他文件夹或声明的容器。 文件夹具有以下组件:
实体:文件夹的实体是其子元素,可以是文件夹和资产。
属性:
name
是文件夹的名称。这与URL路径中没有扩展名的最后一个区段相同。title
是文件夹的可选标题,可以显示该标题而不是其名称。文件夹或资产的某些属性会映射到其他前缀。 jcr:title
、jcr:description
和jcr:language
的jcr
前缀替换为dc
前缀。 因此,在返回的JSON中,dc:title
和dc:description
分别包含jcr:title
和jcr:description
的值。
链接 文件夹公开三个链接:
self
:链接到自身。parent
:链接到父文件夹。thumbnail
:(可选)指向文件夹缩略图图像的链接。在Experience Manager中,资产包含以下元素:
有关内容片段中元素的信息,请参阅Experience Manager资产HTTP API](/docs/experience-manager-65/assets/extending/assets-api-content-fragments.html?lang=zh-Hans#content-fragments)中的[内容片段支持。
在Experience Manager中,文件夹包含以下组件:
Assets HTTP API包括以下功能:
为了便于读取,以下示例忽略完整的cURL记号。 事实上,该记号与Resty相关,后者是cURL
的脚本包装器。
前提条件
https://[aem_server]:[port]/system/console/configMgr
.POST
、PUT
、DELETE
。检索现有文件夹及其子实体(子文件夹或资源)的Siren表示形式。
请求: GET /api/assets/myFolder.json
响应代码:响应代码为:
响应:返回的实体类是资产或文件夹。包含的实体的属性是每个实体的全部属性集的子集。 为了获得实体的完整表示形式,客户端应检索链接指向的URL的内容,该链接的rel
为self
。
新建sling
:OrderedFolder
。 如果提供*
而不是节点名称,则servlet将参数名称用作节点名称。 接受为请求数据是新文件夹的Siren表示形式或一组名称——值对,编码为application/www-form-urlencoded
或multipart
/ form
- data
,对于从HTML表单直接创建文件夹非常有用。 此外,文件夹的属性可以指定为URL查询参数。
如果所提供路径的父节点不存在,则API调用将失败,并带有500
响应代码。 如果文件夹已存在,则调用将返回响应代码409
。
参数: name
是文件夹名称。
请求
POST /api/assets/myFolder -H"Content-Type: application/json" -d '{"class":"assetFolder","properties":{"title":"My Folder"}}'
POST /api/assets/* -F"name=myfolder" -F"title=My Folder"
响应代码:响应代码为:
将提供的文件放在提供的路径上,以在DAM存储库中创建资产。 如果提供*
而不是节点名称,则servlet将使用参数名称或文件名作为节点名称。
参数:参数用 name
于资产名称和 file
文件引用。
请求
POST /api/assets/myFolder/myAsset.png -H"Content-Type: image/png" --data-binary "@myPicture.png"
POST /api/assets/myFolder/* -F"name=myAsset.png" -F"file=@myPicture.png"
响应代码:响应代码为:
更新资产的二进制文件(原始名称的演绎版)。 如果已配置更新,则更新会触发要执行的默认资产处理工作流。
请求: PUT /api/assets/myfolder/myAsset.png -H"Content-Type: image/png" --data-binary @myPicture.png
响应代码:响应代码为:
更新资产元数据属性。 如果更新dc:
命名空间中的任何属性,API将更新jcr
命名空间中的同一属性。 API不同步两个命名空间下的属性。
请求: PUT /api/assets/myfolder/myAsset.png -H"Content-Type: application/json" -d '{"class":"asset", "properties":{"jcr:title":"My Asset"}}'
响应代码:响应代码为:
dc
和jcr
命名空间之间同步元数据更新API方法更新jcr
命名空间中的元数据属性。 使用用户界面进行的更新更改了dc
命名空间中的元数据属性。 要在dc
和jcr
命名空间之间同步元数据值,您可以创建工作流并配置Experience Manager以在资产编辑时执行该工作流。 使用ECMA脚本同步所需的元数据属性。 以下示例脚本将标题字符串同步在dc:title
和jcr:title
之间。
var workflowData = workItem.getWorkflowData();
if (workflowData.getPayloadType() == "JCR_PATH")
{
var path = workflowData.getPayload().toString();
var node = workflowSession.getSession().getItem(path);
var metadataNode = node.getNode("jcr:content/metadata");
var jcrcontentNode = node.getNode("jcr:content");
if (jcrcontentNode.hasProperty("jcr:title"))
{
var jcrTitle = jcrcontentNode.getProperty("jcr:title");
metadataNode.setProperty("dc:title", jcrTitle.toString());
metadataNode.save();
}
}
为资产创建新资产演绎版。 如果未提供请求参数名称,则文件名将用作再现名称。
参数:这些参数 name
用于再现的名称, file
并作为文件引用。
请求
POST /api/assets/myfolder/myasset.png/renditions/web-rendition -H"Content-Type: image/png" --data-binary "@myRendition.png"
POST /api/assets/myfolder/myasset.png/renditions/* -F"name=web-rendition" -F"file=@myRendition.png"
响应代码:响应代码为:
更新分别用新的二进制数据替换资产演绎版。
请求: PUT /api/assets/myfolder/myasset.png/renditions/myRendition.png -H"Content-Type: image/png" --data-binary @myRendition.png
响应代码:响应代码为:
创建新资产注释。
参数:参数用 message
于注释的消息正文和 annotationData
JSON格式的注释数据。
请求: POST /api/assets/myfolder/myasset.png/comments/* -F"message=Hello World." -F"annotationData={}"
响应代码:响应代码为:
复制提供的路径中提供到新目标的文件夹或资产。
请求标题:参数包括:
X-Destination
- API解决方案范围中要将资源复制到的新目标URI。X-Depth
- infinity
或 0
。使用0
仅复制资源及其属性,而不复制其子项。X-Overwrite
-用于 F
防止覆盖现有目标位置的资产。请求: COPY /api/assets/myFolder -H"X-Destination: /api/assets/myFolder-copy"
响应代码:响应代码为:
将给定路径上的文件夹或资产移动到新目标。
请求标题:参数包括:
X-Destination
- API解决方案范围中要将资源复制到的新目标URI。X-Depth
- infinity
或 0
。使用0
仅复制资源及其属性,而不复制其子项。X-Overwrite
-使用强制 T
删除现有资源或防止 F
覆盖现有资源。请求: MOVE /api/assets/myFolder -H"X-Destination: /api/assets/myFolder-moved"
请勿在URL中使用/content/dam
。 移动资产并覆盖现有资产的示例命令如下:
curl -u admin:admin -X MOVE https://[aem_server]:[port]/api/assets/source/file.png -H "X-Destination: http://[aem_server]:[port]/api/assets/destination/file.png" -H "X-Overwrite: T"
响应代码:响应代码为:
删除提供路径上的资源(-tree)。
请求
DELETE /api/assets/myFolder
DELETE /api/assets/myFolder/myAsset.png
DELETE /api/assets/myFolder/myAsset.png/renditions/original
响应代码:响应代码为:
HTTP API更新命名空间 中的元数据 jcr
属性。但是,Experience Manager用户界面会更新dc
命名空间中的元数据属性。
资产API不会返回完整的元数据。 在API中,命名空间是硬编码的,只返回这些代码。 如果您需要整个元数据,请查看资产路径/jcr_content/metadata.json
。