【问题标题】:Sort API methods in Swagger-UI在 Swagger-UI 中对 API 方法进行排序
【发布时间】:2014-09-17 01:04:35
【问题描述】:

我找不到任何工作示例,如何实现以下目标: 我希望 Swagger-UI 中的 API 方法按方法 (GET-POST-PUT-DELETE) 或/AND 按字母顺序排序。

到目前为止,所有方法都以随机顺序显示,即使不是按照我的源代码给出的顺序。

我使用 Jax-RS + Jersey 1。

使用@ApiOperation 的位置属性排序对我来说不是一个选项,因为方法太多,API 仍在扩展,所以如果有新的,我需要全部更新。

有什么提示吗?

【问题讨论】:

    标签: java jax-rs swagger swagger-ui


    【解决方案1】:

    Swagger UI 2.1.0+ 更新:sorter 参数已拆分为两个参数,如Fix 1040Fix 1280 中所述:

    apisorter

    对 API/标签列表应用排序。它可以是“阿尔法” (按名称排序)或函数(请参阅 Array.prototype.sort() 了解如何 排序功能有效)。默认是服务器返回的顺序 不变。

    操作排序器

    对每个 API 的操作列表应用排序。它可以是 'alpha'(按字母数字路径排序)、'method'(按 HTTP 方法)或函数(参见 Array.prototype.sort() 了解如何 排序功能有效)。默认是服务器返回的顺序 不变。

    因此您需要将sorter 更新为apisSorter 以按字母顺序对API 列表进行排序,和/或将operationsSorter 更新为对每个API 的操作列表进行排序。宠物店demo更新为apisSorter,如下图:

    Example:(working demo,按字母排序)

    window.swaggerUi = new SwaggerUi({
    
    ...
    
    apisSorter : "alpha"
    });
    

    对于早于 2.1.0 的 Swagger UI 版本

    sorter 参数仍然适用于旧版本的 Swagger UI:

    您可以在实例化 SwaggerUi 时使用 sorter 参数。这发生在 Swagger-Ui index.html 上的 javascript 中。来自documentation

    sorter 对 API 列表应用排序。它可以是 'alpha'(排序路径 字母数字)或 'method'(按 HTTP 方法排序操作)。 默认是服务器返回的顺序不变。

    Example:

    window.swaggerUi = new SwaggerUi({
    
    ...
    
    sorter : "alpha"
    });
    

    【讨论】:

    • 谢谢,这似乎是我正在寻找的解决方案!不幸的是,我无法让它工作,无论是“alpha”还是“method”。同时迁移到 Jersey-2,现在使用 swagger.js 2.0.30 和 swagger-jersey2-jaxrs_2.10 1.3.4。任何想法,如果这应该与此配置一起使用?
    • 好的,排序器参数似乎很新。我还将我的 swagger 文档更新为来自您的链接(swagger.js 2.0.41)的文档,并且可以与 sorter 参数一起使用!很酷:)
    • 谢谢,这对我来说也是最好的解决方案!
    • 标签排序,现在是tagsSortertagsSorter: "alpha"
    【解决方案2】:

    接受的答案有点过时了。在较新的版本中,它由以下人员完成:

    window.swaggerUi = new SwaggerUi({
    
    ...
    
    apisSorter: "alpha", // can also be a function
    operationsSorter : "method", // can also be 'alpha' or a function
    });
    

    【讨论】:

    • 感谢您的更新!您能否添加一个提示,它指的是哪个版本?
    • 不幸的是,我只能确认这在 2.1.1 版本中有效。那是目前在线的,我也在这样使用它。它也记录在这里:github.com/swagger-api/swagger-ui/blob/master/README.md。但我不能说,当他们改变它时,以及当另一个已经过时:(
    • 标签排序,现在是tagsSortertagsSorter: "alpha"
    【解决方案3】:

    我遇到了同样的问题,我这样解决了

    window.swaggerUi = new SwaggerUi({
        apisSorter: "alpha", 
        operationsSorter: function (a, b) { 
        var order = { 'get': '0', 'post': '1', 'put': '2', 'delete': '3' }; 
        return order[a.method].localeCompare(order[b.method]);    
      },
    });
    

    【讨论】:

    • 您使用哪个版本?这也是2.1吗?
    【解决方案4】:

    Swagger 3.18.3 更新

     window.ui = SwaggerUIBundle({
               ...
                operationsSorter: function (a, b) {
                    var order = {'get': '0', 'post': '1', 'put': '2', 'delete': '3'};
                    return order[a.get("method")].localeCompare(order[b.get("method")]);
                },
               ...
     });
    

    【讨论】:

      【解决方案5】:

      3.x 更新

      之前在cmets中也提到过,apisSorter好像改名为tagsSorter,见Swagger configuration documentation

      window.ui = SwaggerUIBundle({
        ...
        apisSorter: "alpha", /** Seems to be renamed to tagsSorter */
        tagsSorter: "alpha",
        operationsSorter: "alpha"
        ...
      });
      

      【讨论】:

        【解决方案6】:

        对于使用 SwaggerUI3 的 .net Core 用户:

         app.UseSwaggerUi3(j=>j.TagsSorter = "alpha");
        

        【讨论】:

        • 如果在路由中没有使用控制器/方法名作为[HttpGet("{id}")][HttpGet],那么订购API 方法怎么样?我尝试了这种方法,但不起作用。有什么想法吗?
        【解决方案7】:

        对于遇到同样问题的 Python 人来说,这里是解决方法

        使用 flasgger v0.9.5 (=Swagger-UI 3.28.0) 和 Flask v2.0.1:

        app = Flask(__name__)
        config = {
            "ui_params": {
                "operationsSorter": "alpha",  # sorts endpoints alphabetically within a tag
                "tagsSorter": "alpha". # sorts tags alphabetically
            }
        }
        Swagger(app, config=config)
        

        【讨论】:

          【解决方案8】:

          使用我的 swagger 版本,我设法做到了:

          apisSorter: "alpha", 
          operationsSorter: function (a, b) { 
              var order = { 'get': '0', 'patch': '1', 'post': '2'};
              return order[a._root.entries[1][1]].localeCompare(order[b._root.entries[1][1]]);
          }
          

          【讨论】:

            【解决方案9】:

            要在nestjs中对api标签操作进行排序,您可以通过以下方式将SwaggerCustomOptions传递给SwaggerModule.setup()方法:

            import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
            
            //...
            
            const config = new DocumentBuilder().addBearerAuth().build();
            const document = SwaggerModule.createDocument(app, config);
            SwaggerModule.setup('api/docs', app, document, {
              swaggerOptions: {
                apisSorter: 'alpha',
                tagsSorter: 'alpha',
                operationsSorter: 'alpha',
              },
            });
            

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-07-03
            • 2021-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多