Azure API Management 是否支持API级别独立配置类似Named value的变量
当然可以,你可以通过以下两种方案实现单API维度的类Named value变量配置,满足不同API、不同环境的差异化取值需求:
方案1:使用API自定义属性(更推荐,逻辑隔离更清晰)
这是最贴合你需求的实现方式,不需要改动全局变量的命名规则,每个API单独配置同名变量即可:
- 进入单个API(如
foo-API、bar-API)的设置页面,找到「自定义属性」配置项 - 给每个API新增属性,键统一填
my-url,值分别填写对应API需要的目标地址,不同环境可在对应环境的APIM实例中分别配置对应值 - 将全局策略中的
set-url配置修改为动态读取当前API的自定义属性,修改后的完整策略如下:
<policies> <inbound> <base /> <send-request mode="new"> <set-url>@(context.Api.Properties.GetValueOrDefault("my-url", "你的默认兜底URL"))</set-url> <set-method>POST</set-method> <set-body>something</set-body> </send-request> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
方案2:使用带前缀的全局Named value适配
如果你更习惯用全局Named value管理所有变量,可以通过命名前缀的方式区分不同API的同名字段:
- 在全局Named value中按
{API名称}-{变量名}的规则创建变量,比如foo-API-my-url、bar-API-my-url,分别赋值对应URL - 全局策略中动态拼接变量名读取对应值,
set-url配置示例如下:
<set-url>@(context.Deployment.NamedValues.GetValueOrDefault($"{context.Api.Name}-my-url", "你的默认兜底URL"))</set-url>
两种方案都天然适配多环境差异化配置,你只需要在DEV、TEST、PROD不同环境的APIM实例中,分别给对应API的自定义属性/全局Named value配置对应环境的URL值即可,全局策略无需做任何修改。
内容的提问来源于stack exchange,提问作者michelson
相关产品推荐
相关产品推荐

