【问题标题】:Two paths for the same method同一方法的两条路径
【发布时间】:2016-04-02 21:27:06
【问题描述】:

一直在尝试使用 Swagger 为我的 PHP Rest API 生成文档,使用 swagger-php。

它工作得非常好,不太确定我是否喜欢由于文档而出现巨大的评论块,但这不是问题。

我有两条路:

/user/ [POST]
/user/login [POST]

它们都在我的 PHP 代码中调用相同的方法:login()。

我有没有办法说 /user/ [POST] 只是 /user/login [POST] 的别名?

我希望他们两个都出现在操作列表中,并附上他们的文档,并说他们做同样的事情,只是用不同的路径向用户提供选项。

我当然可以复制粘贴注释块,但我真的不希望一个 50 行的注释块用于只调用另一个方法的单行方法。

有什么想法吗?

【问题讨论】:

    标签: swagger swagger-ui swagger-php


    【解决方案1】:

    使用 @SWG\Path 在 swagger-php 中已经可以使用引用。

    /**
     * @SWG\Post(
     *   path="/user/login",
     *   @SWG\Response(response=200, description="OK")
     * )
     * @SWG\Path(path="/user/", ref="#/paths/user~1login");
     */
    function login() {
      ...
    }
    

    但请记住,swagger 是为了记录您的 API,如果 /user/login 是用于登录的规范 API 端点,我什至不会在 swagger 文档中公开别名。

    @Mark 在 swagger-php 中,path 仍然拥有 operations,但它使用 some tricks 自动创建 @SWG\Path,这避免了像一般的样板用例是为每个 php 方法记录一个 http 方法,但如果您的方法处理多个 http 方法,则直接使用 @SWG\Path 可能会更短:

    /**
     * @SWG\Path(
     *   path="/example",
     *   @SWG\Get(response=200, description="OK"),
     *   @SWG\Post(response=200, description="OK"),
     *   @SWG\Put(response=200, description="OK")
     * )
     */
     function thisMethodHandlesGetPostAndPutRequests() {
     }
    

    【讨论】:

    • 尽管我不再使用 swagger-php,但我还是花时间对此进行了测试,似乎按预期工作。将此标记为已解决。
    • 我认为它应该是 ref="#/paths/~1user~1login" - /user/login 中的字符 / 在引用中使用时需要 escaped~1
    • ref 字段是当前版本 swagger-php 2.0.12 的 @SWG\Path 注释的意外字段。另外 swagger-php 中没有实现 / by ~1 的编码
    • @Arno 我已经更新了示例中的 ref 并在 swagger-php 2.0.13 中发布,它将 ref 字段添加到 @SWG\Path 并实现了 ~1 编码。
    • @Bob Fanger 感谢开发者,我会尽快检查您的改进
    【解决方案2】:

    使用Swagger 2.0,您可以引用路径并避免重复文档。

    示例:

    { “招摇”:2.0, “信息”:{ “版本”:“1.0.0”, “标题”:“宠物” }, “主机”:“本地主机:1234”, “方案”:[“http”], “路径”:{ "/pet": { "$ref": "#/paths/x-endpoint-pet" }, “x-端点宠物”:{ “邮政”: { “标签”:[“宠物”] } } } }

    swagger-php 自版本 2.0.6 起不支持此类引用。

    这至少部分是由于swagger-php 中采用的具体实现方法。 php 实现颠倒了 pathoperationown-owned 关系/em> 个对象。

    Swagger 2.0 规范中,path 拥有 操作,而 path 可以引用其他路径

    swagger-php 实现中,操作拥有路径。这会给人一种错误的印象,即操作可以有别名和/或拥有多个路径

    这是一个概念性问题,可能会在 swagger-php 的未来版本中得到解决。

    【讨论】:

    • 你的例子是正确的。您能提到x-endpoint-pet 路径不包含斜杠吗?如果路径包含斜杠,则必须将斜杠编码为~1
    猜你喜欢
    • 2016-05-23
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2023-02-11
    相关资源
    最近更新 更多