web-dev-qa-db-ja.com

SwaggerでのAPIパーツのフィルタリング

REST APIとspringfox swagger v2.6.1が含まれていて動作しています。しかし、一部のコントローラーは非常に技術的で意図されていないので、常にすべてのコントローラーを表示したいとは思いません。平均的なユーザー向けですが、コードを再コンパイルせずに、表示するものを選択できるようにしたいと考えています。ページの上部に、「デフォルト(/ v2/api-docs)」(またはこれを1つのエントリのみで構成します。私の直感は、そこに複数のオプションを設定することが可能であり、オプションに応じて特定のコントローラクラスを表示するかどうかです。

画像のアップロード方法がよくわからないので、スクリーンショットを提供できません。とにかく私の質問が明確であることを願っています。

私のプロジェクトでスワッガーを行うコードは、可能な限り単純です。

@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();
}

いくつかのプロパティを追加する、2つの.select()を実行する、さまざまな目的で選択するなど、いくつかの方法を試しましたが、達成したいと思っていることに近いところに到達できないようです。

助けてくれてありがとう!

6
totee

私が考えることができるいくつかのオプション

  1. SpringSecurityを使用して別のエンドポイントに認証を追加し、エンドポイントにまったくアクセスできないようにすることができます(ただし、Swagger UIには表示されます)。

  2. あなたが上で言及しているドロップダウンは次のように構成できます

    @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();
    }
    
  3. Docker構成で次のようにして、Swagger UIに表示されないようにエンドポイントを完全に除外できます。

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

    これにより、/ errorおよび/ product以外のすべてのエンドポイントが使用可能になります。このようにしてエンドポイントを除外できます。

14
pvpkiran