我找不到任何工作示例,如何实现以下目标:我希望 Swagger-UI 中的 API 方法按方法(GET-POST-PUT-DELETE)或/AND 字母顺序排序。
到目前为止,所有方法都以随机顺序显示,即使不是按照我的源代码给出的顺序。
我使用 Jax-RS + Jersey 1。
使用@ApiOperation 的位置属性进行排序对我来说不是一个选项,因为方法太多,API 仍在扩展,所以如果有新方法,我需要全部更新。
有什么提示吗?
我找不到任何工作示例,如何实现以下目标:我希望 Swagger-UI 中的 API 方法按方法(GET-POST-PUT-DELETE)或/AND 字母顺序排序。
到目前为止,所有方法都以随机顺序显示,即使不是按照我的源代码给出的顺序。
我使用 Jax-RS + Jersey 1。
使用@ApiOperation 的位置属性进行排序对我来说不是一个选项,因为方法太多,API 仍在扩展,所以如果有新方法,我需要全部更新。
有什么提示吗?
Swagger UI 2.1.0+ 的更新:该sorter
参数已拆分为两个参数,如Fix 1040和Fix 1280中所述:
apissorter
对 API/标签列表应用排序。它可以是“alpha”(按名称排序)或函数(请参阅 Array.prototype.sort() 以了解排序函数的工作原理)。默认是服务器返回的顺序不变。
操作分拣机
对每个 API 的操作列表应用排序。它可以是“alpha”(按字母数字路径排序)、“method”(按 HTTP 方法排序)或函数(请参阅 Array.prototype.sort() 以了解排序函数的工作原理)。默认是服务器返回的顺序不变。
因此,您需要更新sorter
以apisSorter
按字母顺序对 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"
});
接受的答案有点过时了。在较新的版本中,它是通过以下方式完成的:
window.swaggerUi = new SwaggerUi({
...
apisSorter: "alpha", // can also be a function
operationsSorter : "method", // can also be 'alpha' or a function
});
我有同样的问题,我像这样修复了它
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]);
},
});
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")]);
},
...
});
3.x 更新
正如之前评论中提到的,apisSorter 似乎已重命名为 tagsSorter,请参阅Swagger 配置文档。
window.ui = SwaggerUIBundle({
...
apisSorter: "alpha", /** Seems to be renamed to tagsSorter */
tagsSorter: "alpha",
operationsSorter: "alpha"
...
});
对于最终遇到同样问题的 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)
对于使用 SwaggerUI3 的 .net Core 用户:
app.UseSwaggerUi3(j=>j.TagsSorter = "alpha");
要在 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',
},
});
使用我的招摇版本,我设法做到了:
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]]);
}