【问题标题】:Are those OpenAPI 3 paths ambiguous?那些 OpenAPI 3 路径是否模棱两可?
【发布时间】:2021-05-04 10:10:46
【问题描述】:

这些 OpenAPI 3 路径是否不明确?

/shops/{shopId}/pets/{petId}   
/shops/{shopId}/pets/_search

我想回答 ,但是,严格阅读规范,我无法决定,因为它们似乎不属于规范中的 3 条陈述:

  1. 两条路径都不是具体的(规范中使用的术语)
  2. 路径似乎不符合具有相同层次结构但模板名称不同的模板路径标准(我不太清楚):"/shops/{}/pets/{}" != "/shops/{}/pets/_search "
  3. 路径看起来不像模棱两可示例

以下是 OA3 规范的摘录(仅此而已:我的问题在第一行)。

OA3 规范摘录

OpenAPI 3 规范 (https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#paths-object) 的“路径对象”段落说明(3 个句子,3 个语句):

匹配 URL 时,具体(非模板化)路径将在其模板化对应路径之前匹配。具有相同层次结构但不同模板名称的模板路径不得存在,因为它们是相同的。如果匹配不明确,则由工具决定使用哪一个。

这 3 个语句后面跟着 3 个示例(仅此而已):

假设以下路径,具体定义,/pets/mine, 如果使用将首先匹配:

/pets/{petId}
/宠物/我的

以下路径被视为相同且无效:

/pets/{petId}
/宠物/{名字}

以下可能导致不明确的解决方案:

/{实体}/我
/books/{id}

【问题讨论】:

  • 不是您问题的答案。但是 URL /shops/{shopId}/pets/_search 包含一个动词 search,这是一种反模式。该 URL 应为 /shops/{shopId}/pets?action=_search
  • @MohitMutha 为什么这是一种反模式?相反,为什么可以在查询参数中包含动词,但不能在路径参数中包含动词?
  • 在 Http 中,动词是表示 CRUD 操作之一的 Http 方法(GET、PUT、POST、DELETE 等)。在上述情况下,您想要search,这是 GET 的一种形式。 GET /shops/{shopId}/pets 表示我想要pets 的列表,因此不需要search/
  • @MohitMutha 搜索不仅仅是获取宠物列表:例如,它是获取带有分数和方面的命中列表。但我明白你的意思:_search 不是 RESTful。

标签: swagger openapi


【解决方案1】:

我对规范的解读是它们并不含糊,因为其中一个比另一个更具体。如果{petId} 参数值设置为_search,则更具体的优先。

【讨论】:

  • 如果您可以帮助我们使规范更清晰,请在规范回购中提出问题或拉取请求。谢谢!
  • 感谢@mikeralphson 的回答:这也是我的阅读(因为它的价值......)。也感谢您的建议:我会提出一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2011-09-07
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多