24

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

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

我使用 Jax-RS + Jersey 1。

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

有什么提示吗?

4

9 回答 9

17

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

apissorter

对 API/标签列表应用排序。它可以是“alpha”(按名称排序)或函数(请参阅 Array.prototype.sort() 以了解排序函数的工作原理)。默认是服务器返回的顺序不变。

操作分拣机

对每个 API 的操作列表应用排序。它可以是“alpha”(按字母数字路径排序)、“method”(按 HTTP 方法排序)或函数(请参阅 Array.prototype.sort() 以了解排序函数的工作原理)。默认是服务器返回的顺序不变。

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

示例:(工作演示,按字母顺序排序)

window.swaggerUi = new SwaggerUi({

...

apisSorter : "alpha"
});

对于早于 2.1.0 的 Swagger UI 版本

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

实例化SwaggerUi时可以使用sorter 参数。这发生在 Swagger-Ui index.html 上的 javascript 中。从文档中:

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

示例

window.swaggerUi = new SwaggerUi({

...

sorter : "alpha"
});
于 2014-09-24T19:48:11.017 回答
11

接受的答案有点过时了。在较新的版本中,它是通过以下方式完成的:

window.swaggerUi = new SwaggerUi({

...

apisSorter: "alpha", // can also be a function
operationsSorter : "method", // can also be 'alpha' or a function
});
于 2015-09-02T05:10:01.700 回答
10

我有同样的问题,我像这样修复了它

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]);    
  },
});
于 2015-09-30T19:56:51.840 回答
1

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")]);
            },
           ...
 });
于 2019-11-07T09:36:35.077 回答
1

3.x 更新

正如之前评论中提到的,apisSorter 似乎已重命名为 tagsSorter,请参阅Swagger 配置文档

window.ui = SwaggerUIBundle({
  ...
  apisSorter: "alpha", /** Seems to be renamed to tagsSorter */
  tagsSorter: "alpha",
  operationsSorter: "alpha"
  ...
});
于 2021-09-23T07:57:11.760 回答
0

对于最终遇到同样问题的 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)
于 2021-08-03T13:00:52.967 回答
0

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

 app.UseSwaggerUi3(j=>j.TagsSorter = "alpha");
于 2020-06-30T14:40:19.107 回答
0

要在 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',
  },
});
于 2021-10-11T19:33:35.230 回答
0

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

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]]);
}
于 2021-10-05T14:32:42.320 回答