唯一命名的资源
本文比较了 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 文件中声明资源以供重新部署。 若要在不重新部署的情况下读取资源的属性,请使用 现有 关键字。
重要
设置后,无法更改客户端提供的密钥属性。