Azure API Management单API下操作指定不同serviceUrl及版本适配问询
Azure API Management 问题解答
1. 修改单个操作指向全新端点(不创建新API集合)
可以直接在目标操作的BICEP定义中覆盖serviceUrl属性,无需创建新的API集合。默认情况下操作会继承API级的serviceUrl,但显式为单个操作指定serviceUrl后,该操作会使用你设置的全新端点,其他操作仍保留对API级serviceUrl的继承。
示例BICEP代码片段:
resource api 'Microsoft.ApiManagement/service/apis@2023-09-01-preview' = { name: 'register-api-transaction' parent: apimService properties: { serviceUrl: 'https://original-api-endpoint.com' displayName: 'Register API Transaction' path: 'register-transaction' operations: [ // 第一个操作:继承API的serviceUrl { name: 'get-transaction-history' properties: { displayName: 'Get Transaction History' method: 'GET' urlTemplate: '/history' } } // 第二个操作:覆盖为全新端点 { name: 'get-transaction-summary' properties: { displayName: 'Get Transaction Summary' method: 'GET' urlTemplate: '/summary' serviceUrl: 'https://new-api-endpoint.com' // 显式指定新端点 } } ] } }
2. 通过版本控制实现操作指向全新基础URL
可以通过API版本控制实现这一需求。你可以为register-api-transaction创建一个新版本,在该版本的API级别设置全新的基础serviceUrl,让目标操作(或所有操作)使用这个版本的基础URL;也可以仅在新版本的目标操作中单独指定serviceUrl,灵活控制范围。
具体实现思路:
- 先定义API版本集,为后续版本管理提供统一标识
- 创建原API的新版本,可在版本API级别设置全新的
serviceUrl - 版本化的API会有独立的访问路径(如
/v2/register-transaction),客户端通过访问对应版本路径使用新基础URL的操作 - 若仅需单个操作在新版本中使用新基础URL,只需在该版本的操作定义中显式设置
serviceUrl即可,其他操作可继承版本API的serviceUrl或保持原有配置
示例BICEP代码片段:
// API版本集 resource versionSet 'Microsoft.ApiManagement/service/api-version-sets@2023-09-01-preview' = { name: 'register-api-version-set' parent: apimService properties: { displayName: 'Register API Version Set' versioningScheme: 'Path' } } // 原API resource api 'Microsoft.ApiManagement/service/apis@2023-09-01-preview' = { name: 'register-api-transaction' parent: apimService properties: { serviceUrl: 'https://original-api-endpoint.com' displayName: 'Register API Transaction' path: 'register-transaction' versionSetId: versionSet.id } } // V2版本API,使用全新基础URL resource apiV2 'Microsoft.ApiManagement/service/apis@2023-09-01-preview' = { name: 'register-api-transaction-v2' parent: apimService properties: { serviceUrl: 'https://new-base-url.com' displayName: 'Register API Transaction V2' path: 'register-transaction' version: 'v2' versionSetId: versionSet.id operations: [ // 目标操作:使用版本API的新基础URL { name: 'get-transaction-summary' properties: { displayName: 'Get Transaction Summary V2' method: 'GET' urlTemplate: '/summary' } } // 其他操作可按需配置继承或自定义serviceUrl ] } }
内容的提问来源于stack exchange,提问作者William Fernandes
相关产品推荐
相关产品推荐

