访问对象 - Amazon Cloud Directory

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

访问对象

可以通过路径或通过 objectIdentifier 访问目录中的对象。

Path (路径)— Cloud Directory 树中的每个对象都可以通过描述如何访问它的路径名称进行标识和查找。路径从目录的根 (上图中的节点 000) 开始。路径表示法以使用斜杠 (/) 标记的链接开头,后跟通过路径分隔符 (也是斜杠) 分隔的子链接,直到到达路径的最后一部分。例如,上图中的对象 005 可以使用路径 /group/a/d 进行标识。多个路径可能会标识一个对象,因为作为叶节点的对象可以具有多个父级。以下路径也可以用于标识对象 005:/group/b/e

对象标识符— 目录中的每个对象都具有唯一全局标识符,即。ObjectIdentifierObjectIdentifier作为CreateObjectAPI 调用。还可以使用 ObjectIdentifier API 调用提取 GetObjectInformation例如,要提取对象 005 的对象标识符,可以通过将对象引用作为指向对象的路径 (即 group/b/e 或 group/a/d) 来调用 GetObjectInformation

GetObjectInformationRequest request = new GetObjectInformationRequest() .withDirectoryArn(directoryArn) .withObjectReference("/group/b/e") .withConsistencyLevel(level) GetObjectInformationResult result = cdClient.getObjectInformation(request) String objectIdentifier = result.getObjectIdentifier()

填充对象

可以使用 AddFacetToObject API 调用将新分面添加到对象。对象的类型基于附加到对象的分面来确定。目录中的对象附加基于对象的类型进行工作。附加对象时,请注意以下规则:

  • 叶节点对象不能有子级。

  • 节点对象可以有多个子级。

  • 策略类型的对象不能有子级,可以有零个或一个父级。

更新对象

可以通过多种方式更新对象:

删除对象

附加的对象必须满足特定条件,您才能从目录中将其删除:

  1. 必须将对象从树分离。仅当对象没有任何子级时才能分离对象。如果对象有子级,则必须先分离所有子级。

  2. 仅当删除了分离的对象上的所有属性时,才能删除该对象。通过删除附加到某个对象的每个分面,可以删除该对象上的属性。可以通过调用 GetObjectInformation 来提取附加到对象的分面的列表。

  3. 对象还必须没有父级、没有策略附加并且没有索引附加。

因为对象必须从树中完全分离才能进行删除,所以必须使用对象标识符才能将其删除。

查询对象

本部分讨论用于在目录中查询对象的各种相关元素。

目录遍历

由于 Cloud Directory 是一种树,因此可以使用ListObjectChildrenAPI 操作或从下而上使用ListObjectParentsAPI 操作

策略查找

如果提供对象引用,则 LookupPolicy API 操作可采用从上向下的方式,沿其指向根的路径返回附加的所有策略。任何不指向根的路径都会被忽略。返回所有策略类型对象。

如果对象是叶节点,则它可以具有多个指向根的路径。此调用对于每次调用仅返回一个路径。要提取其他路径,请使用分页标记。

索引查询

Cloud Directory 通过使用以下范围,支持丰富的索引查询功能:

  • FIRST - 从第一个索引属性值开始。开始属性值是可选的。

  • LAST - 返回直到索引结束的属性值,包括缺失值。结束属性值是可选的。

  • LAST_BEFORE_MISSING_VALUES - 返回直到索引结束的属性值,不包括缺失值。

  • INCLUSIVE - 包括所指定的属性值。

  • EXCLUSIVE - 不包括所指定的属性值。

父路径列表

使用 ListObjectParentPaths API 调用可以为任何类型的对象 (节点、叶节点、策略节点、索引节点) 检索所有可用父路径。如果需要计算对象的所有父级,此 API 操作十分有用。该调用从目录根返回所有对象,直到请求的对象。它还基于用户定义的 MaxResults 返回路径数 (如果存在多个指向父级的路径)。返回的路径和节点的顺序在多个 API 调用间是一致的,除非删除或移动了对象。会从目标对象中忽略不指向目录根的路径。

举例来说明此工作原理,假设一个目录的对象层次结构类似于下面的示意图。

Object hierarchy diagram showing nodes, links, and policy objects in a tree structure.

编号形状表示不同对象。该对象与目录根 (000) 之间的箭头数表示完整路径,会在输出中进行表示。下表显示对层次结构中特定叶节点对象进行的查询的请求和响应。

针对对象的示例查询
请求 响应
004, PageToken: null, MaxResults: 1 [{/group/a/c], [000, 001, 002, 004]}], PageToken: null
005, PageToken: null, MaxResults: 2 [{/group/a/d, [000, 001, 002, 005]}, { /group/b/e, [000, 001, 003, 005]}], PageToken: null
注意

在此示例中,对象 005 将节点 002003 作为父级。此外,因为 MaxResults 为 2,所以两个路径都会在列表中显示对象。

005, PageToken: null, MaxResults: 1 [{/group/a/d, [000, 001, 002, 005]}], PageToken: <encrypted_next_token>
005, PageToken: <encrypted_next_token>, MaxResults: 1 [{/group/b/e, [000, 001, 003, 005]}], PageToken: null
注意

在此示例中,对象 005 将节点 002003 作为父级。此外,因为 MaxResults 为 1,所以进行多个包含页面标记的分页调用来获取所有路径及对象列表。

006, PageToken: null, MaxResults: 1 [{/group/b/f, [000, 001, 003, 006]}], PageToken: null
007, PageToken: null, MaxResults: 1 [{/group/a/index, [000, 001, 002, 007]}], PageToken: null