唯一命名的资源

本文比较了 Microsoft Azure API 和 Microsoft Graph API 中的资源唯一关键策略,以及对 Microsoft Graph API 所做的更改,使其能够在声明性基础结构(如 Bicep 文件)中使用。 它还介绍了如何使用这些更改来引用通过 Bicep 文件部署以外的机制创建的现有Microsoft图形资源。

重要

Microsoft Graph Bicep 目前为预览版。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

Azure 和 Microsoft Graph 资源密钥

Microsoft Azure 和 Microsoft Graph API 使用不同机制来创建资源。 尝试在同一 Bicep 模板文件中声明这两个资源时,这些差异变得更加明显。

Microsoft Azure API 创建资源的标准模式是将 HTTP PUT 方法用于调用 name客户端提供的唯一密钥。 如果资源不存在,则此幂等操作会创建具有提供 name 值的资源;如果资源不存在,则更新(替换):

PUT /resourceCollection/{nameValue}

Microsoft图形 API 创建资源的标准模式是使用 HTTP POST 方法。 此方法不是幂等的,它返回名为 id的服务生成的唯一 ID 密钥。

POST /resourceCollection

对现有资源的更新是使用 HTTP PATCH 方法完成的,这与 PUT 不使用替换语义不同。

Microsoft Graph 创建语义非常适合大多数开发人员,但不符合声明性文件模板的两个关键要求:

  • 重复性:模板文件部署应多次运行,结果与部署环境与模板文件中声明的资源匹配。 对于 POST 等非幂等方法,无法实现这种可重复性。
  • 客户端提供的密钥或名称:创作和维护声明性模板文件需要提前声明资源名称(或客户端提供的密钥)。 对于大多数Microsoft图形 API,无法提供客户端的密钥。

Microsoft Graph 客户端提供的密钥

某些Microsoft Graph 资源支持客户端提供的密钥属性,使幂等的“upsert”机制能够在资源不存在或更新资源(如果不存在)的情况下创建资源。 此客户端提供的密钥属性更有可能是备用密钥,但有时它是主键。

PATCH /resourceCollection(clientProvidedAlternateKeyProperty='nameValue')

使用备用密钥创建资源时,将为主键属性设置服务生成的值。

只有遵循此模式的资源公开为 Microsoft Graph Bicep 类型,但很少有例外。

下表列出了 Bicep 文件中支持的 Microsoft Graph 资源的客户端提供的键属性:

Microsoft Graph 资源 客户端提供的密钥属性
应用程序 uniqueName
联合标识凭据 name
分配给的应用角色 从唯一标识对象的属性值中隐含
uniqueName
OAuth2 权限授予 从唯一标识对象的属性值中隐含
服务主体 appId

现有Microsoft图形资源

可以通过支持的客户端提供的密钥属性引用 Bicep 模板中的现有Microsoft图形资源。 通过 HTTP POST 创建的资源可能未设置此属性,并且需要一次性回填。

设置后,客户端提供的密钥属性允许在 Bicep 文件中声明资源以供重新部署。 若要在不重新部署的情况下读取资源的属性,请使用 现有 关键字。

重要

设置后,无法更改客户端提供的密钥属性。

下一步