大张旗鼓地过滤API零件 [英] Filtering for API parts in swagger

查看:67
本文介绍了大张旗鼓地过滤API零件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个REST API,并且包含了springfox swagger v2.6.1并且可以正常工作.但是现在,我不想总是显示我拥有的所有控制器,因为其中一些控制器非常技术性,不适合普通用户使用,但是我希望能够选择显示的内容而不必重新编译代码.页面顶部有一个下拉字段,上面写着默认(/v2/api-docs)"(或您配置的任何内容),仅此一项.我的直觉是应该在那里可以有多个选项,并根据该选项显示或不显示某些控制器类.

I have a REST API and springfox swagger v2.6.1 included and working. But now, I would like to not always display all the controllers I have, because some of them are very technical and not intended for the average user, but I want to be able to choose what I show without having to recompile the code. There is this dropdown field on top of the page which says 'default (/v2/api-docs)' (or whatever you configured it to), with only this one entry. My hunch is that it should be possible to have multiple options there, and according to the option show certain controller classes or not.

由于我真的不知道如何上传图像,因此无法提供屏幕截图.我希望我的问题仍然清楚.

As I don't really know how to upload images, I cannot provide screenshots. I hope that my question is clear anyway.

在我的项目中大张旗鼓的代码是最简单的:

The code that does the swagger in my project is the simplest possible:

@Bean
public Docket api() {

    return new Docket( DocumentationType.SWAGGER_2 )
            .select()
                .apis( RequestHandlerSelectors.any() )
                .paths( PathSelectors.any() )
                .build()
            .apiInfo( metadata() );
}

private ApiInfo metadata() {
    return new ApiInfoBuilder()
            .title( "My awesome ACS API" )
            .description( "All the requests that the server will respond to." )
            .version( "1.0.0" )
            .build();
}

我尝试了几种方法,例如添加一些属性,执行两个.select()并选择不同的东西,但是我似乎并没有达到我希望实现的目标.

I tried several approaches like adding some Properties, doing two .select() and selecting for different things, but I don't really seem to get anywhere close to what I hope to achieve.

感谢您的帮助!

推荐答案

我能想到的一些选项

  1. 您可以使用SpringSecurity将身份验证添加到不同的端点,并使端点完全不可访问(但在Swagger UI中可见).

  1. You can add Authentication to different endpoints using SpringSecurity and make the endpoints not accessible at all(But will be visible in Swagger UI).

您在顶部提到的下拉菜单可以这样配置

The drop down you are mentioning on the top can be configured something like this

@Bean
public Docket orderApi() {
    // This will group the endpoints strting with /order.   
    // And it will be visible as a separate group in the drop down(In Swagger UI) 
    // with the name 'order' as specified in the groupName(..)
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("order")
            .apiInfo(metadata())
            .select()
            .paths(PathSelectors.ant("/order/**"))
            .build();
}

@Bean
public Docket orderValidationApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("product")
            .apiInfo(metadata())
            .select()
            .paths(PathSelectors.ant("/product/**"))
            .build();
}

  • 您可以通过在Docker配置中像这样的设置完全排除端点在Swagger UI中不可见

  • You can completely exclude the endpoint from being visible in Swagger UI with someting like this in your Docker configuration

       return new Docket( DocumentationType.SWAGGER_2 )
            .select()
                .apis( RequestHandlerSelectors.any() )
                .paths(PathSelectors.regex("(?!/error).+")).paths(PathSelectors.regex("(?!/product).+"))
                .build()
            .apiInfo( metadata() );  
    

    这将使所有不是/error和/product的端点可用.您可以像这样过滤掉端点.

    This will make all the endpoints which are not /error and /product available. you can filter out endpoints like this.

    这篇关于大张旗鼓地过滤API零件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆