17

我有一个 API 允许传入任意路径,例如所有这些:

  • /api/tags
  • /api/tags/foo
  • /api/tags/foo/bar/baz

是有效的路径。我试图描述如下:

 /tags{tag_path}:
    get:
      parameters:
        - name: tag_path
          in: path
          required: true
          type: string
          default: "/"

但是,https: //generator.swagger.io 在路径中编码斜杠,所以它不起作用。那么有没有办法在 Swagger 中描述我的 API?

4

2 回答 2

11

从 OpenAPI 3.1 开始不支持此功能,我必须求助于解决方法。

如果我有一个路径/tags{tag_path}并且我输入类似这样的内容tag_path: /foo/bar,那么实际的查询请求 URL 将是: /tags%2Ffoo%2Fbar。所以,我只是在我的后端添加了对它的支持:/tags*urldecodes 的端点处理程序(它是%2Ffoo%2Fbar),它又变成/foo/bar了。

是的,一个 hack,但它有效,而且总比没有好。在我的例子中,标签名称不能包含/字符,所以没有冲突。当然,您的里程可能会有所不同。

于 2017-03-18T21:29:36.217 回答
1

如果您使用的是像 Connexion 这样的框架,它很可能确实支持通配符路径参数(即使它不在 OpenAPI 规范中)。

这是连接的示例。

paths:
  /pages/{path}:
    get:
     # (...)
      parameters:
        - name: "path"
          in: path
          description: "Remainder of path, including slashes."
          schema:
            type: string
            format: path

不同之处在于format: path添加。

于 2021-09-15T22:53:36.883 回答