azure - Azure API 管理:通过路径和查询参数区分操作
问题描述
我有一个后端 API(实现ApiController),我想把它放在 APIM API 后面。ApiController 允许我们根据传入的查询参数区分两个不同的 GET 操作。当我尝试在 APIM 中定义这些端点时,我收到以下错误:
该消息表明端点仅由路径和操作定义。但这似乎与我在这里找到的文档相矛盾,这表明有一种方法可以根据查询参数区分操作:
路径和查询中的必需参数必须具有唯一名称。(在 OpenAPI 中,参数名称只需要在一个位置内是唯一的,例如路径、查询、标头。但是,在 API 管理中,我们允许通过路径和查询参数来区分操作(OpenAPI 不支持)。那是为什么我们要求参数名称在整个 URL 模板中是唯一的。)
我有一个 ApiController 定义了两个不同的 Get 操作,只是查询参数不同。我如何在我的 APIM API 中表示它?
解决方案
我从 Azure 支持人员那里得到了答案,在这里分享了信息:
APIM 端点由您分配给操作的路径、方法和名称定义。要区分同一控制器的两个 GET 端点,仅在查询参数上有所不同,您需要将所需的查询参数硬编码到路径中。请看以下两张图片:
在后一张图中,硬编码的查询参数被 UI 归类为模板参数,但它的行为仍像常规查询参数。以这种方式定义的查询参数:
- 是必须的
- 可以出现在请求的查询参数列表中的任何位置
- 不区分大小写
- 在开发门户中与所有其他路径参数和查询参数一起列为“请求参数”
编辑:
截图中有错别字。URL 区分大小写,并且“blah”的大小写在每种情况下都不同。以下是大小写一致时开放 API 规范的外观。重载路径(将查询参数硬编码到路径模板中)出现在名为 的部分中x-ms-paths
:
{
"swagger": "2.0",
"info": {
"title": "Echo API",
"version": "1.0"
},
"host": "<hostUrl>",
"basePath": "/echo",
"schemes": ["https"],
"securityDefinitions": {
"apiKeyHeader": {
"type": "apiKey",
"name": "Ocp-Apim-Subscription-Key",
"in": "header"
},
"apiKeyQuery": {
"type": "apiKey",
"name": "subscription-key",
"in": "query"
}
},
"security": [{
"apiKeyHeader": []
}, {
"apiKeyQuery": []
}],
"paths": {
"/Blah": {
"get": {
"operationId": "blah",
"summary": "Blah",
"responses": {}
}
}
},
"tags": [],
"x-ms-paths": {
"/Blah?alpha={alpha}": {
"get": {
"operationId": "blah2",
"summary": "Blah2",
"parameters": [{
"name": "alpha",
"in": "query",
"required": true,
"type": "string"
}],
"responses": {}
}
}
}
}
推荐阅读
- java - 无法使用 igniterealtime/REST-API-Client 在 openfire 创建用户
- android - 安卓计费库V3.0.0 不工作
- java - 使用 Firebase 计算用户之间的位置
- python - BERT 服务器未启动
- java - JAVA-SPRING - 错误 java.lang.ClassNotFoundException: "com.mysql.jdbc.Driver" 将我的连接连接到其他类但在 Main 上工作
- macos - 有没有办法使用“/sys-like”文件夹更改 macOS 上的屏幕亮度?
- php - 根据可能性显示文本
- ios - 是否可以更改单个 UITableViewCell 的属性?
- javascript - 如何用 Javascript 控制 Django?
- puppeteer - 如何等待加载页面上的 Javascript 执行