Swagger-UI中的排序API方法

6qfn3psc  于 2022-12-04  发布在  其他
关注(0)|答案(9)|浏览(273)

我找不到任何工作的例子,如何实现以下:我希望Swagger-UI中的API方法按方法(GET-POST-PUT-DELETE)或/和字母顺序排序。
到目前为止,所有方法都是以随机顺序显示的,甚至不是以给出我的源代码的顺序。
我使用Jax-RS + Jersey 1。
使用@ApiOperation的position属性排序对我来说不是一个选项,因为有太多的方法,而且API仍然在扩展,所以如果有新的方法,我需要更新所有的方法。
有什么提示吗?

t1qtbnec

t1qtbnec1#

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

Apis分类器
对API/标记列表应用排序。它可以是'alpha'(按名称排序)或函数(请参阅Array.prototype.sort()了解排序函数如何工作)。默认为服务器返回的顺序不变。
操作排序器
对每个API的操作列表应用排序。它可以是'alpha'(按路径字母数字排序)、'method'(按HTTP方法排序)或函数(请参阅Array.prototype.sort()了解排序函数的工作原理)。默认为服务器返回的顺序不变。
因此,您需要将sorter更新为apisSorter,以便按字母顺序对API列表进行排序,和/或将operationsSorter更新为每个API的操作列表进行排序。pet shop演示已更新为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中进行。从文档中:
排序程序对API列表应用排序。它可以是'alpha'(按字母数字顺序排序路径)或'method'(按HTTP方法排序操作)。默认值是服务器返回的未更改顺序。
Example

window.swaggerUi = new SwaggerUi({

...

sorter : "alpha"
});
uqjltbpv

uqjltbpv2#

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

window.swaggerUi = new SwaggerUi({

...

apisSorter: "alpha", // can also be a function
operationsSorter : "method", // can also be 'alpha' or a function
});
csga3l58

csga3l583#

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

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]);    
  },
});
jjjwad0x

jjjwad0x4#

针对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")]);
            },
           ...
 });
92dk7w1h

92dk7w1h5#

针对3.x+的更新

正如前面的评论中提到的,apisSorter似乎在v. 3.x中被重命名为tagsSorter,请参见Swagger configuration documentation

window.ui = SwaggerUIBundle({
  ...
  tagsSorter: "alpha",
  operationsSorter: "alpha"
  ...
});
du7egjpx

du7egjpx6#

对于使用SwaggerUI3的.net核心用户:

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

kdfy810k7#

对于遇到同样问题的Python用户,以下是解决方法

使用闪光器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)
ars1skjm

ars1skjm8#

用我的昂首阔步版本我已经设法这样做:

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]]);
}
jm2pwxwz

jm2pwxwz9#

要对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',
  },
});

相关问题