Swagger 2 @ApiIgnore переключение свойств в конфигурационном сервере - PullRequest
1 голос
/ 19 октября 2019

Я использую Swagger 2 (2.9.2) в приложении Sprinngboot.

Зависимость:

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>



<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

Код:

package com.khan.vaquar.swagger;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.google.common.base.Predicate;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket postsApi() {
        return new Docket(DocumentationType.SWAGGER_2).groupName("vaquar khan public-api").apiInfo(apiInfo()).select().apis( RequestHandlerSelectors.basePackage( "com.khan.vaquar" ) )
                .paths(paths()).build();



    }
    private Predicate<String> paths() {
        return or(regex("/.*"), regex("/.*"));
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("vaquar khan public-api")
                .description("vaquar khan public-api app API reference for developers")
                .termsOfServiceUrl("XXX-YYY-ZZZ.com").contact("info@vkhan.com")
                .license("vaquar khan License").licenseUrl("Licence@vkhan.com").version("1.0").build();
    }

}

У меня есть почти 70 различных микросервисов, многие из которых являются внутренними, и лишь немногие 10 микросервисов являются внешними.

Теперь внутри Swagger Doc скрывается микро-сервис с использованием @ApiIgnore, мы игнорировали 60 в Swagger и отображали только 10 внешних API.

Проблема:

Теперь у меня есть требование, чтобы внешний пользователь мог видеть только 10 микросервисов в swagger doc, а внутренний микросервисный swagger (70) должен был видеть разработчик и внутреннийпользователи.

Есть ли какой-нибудь способ, которым мы можем определить в свойствах приложения @ApiIgnore для prod и отображать только 10, а в свойствах конфигурации dev скрыть @ ApiIgnore

1 Ответ

1 голос
/ 31 октября 2019

Если вы используете профили, вам не нужны аннотации @ApiIgnore.

Определите профиль разработчика. Например:

@Profile("dev")
@Controller
@RequestMapping("/internal/...")
@Api(value = "/internal/...", description = "Internal stuff")
public class OneOfTheInternalControllers { ... }

Теперь пометьте все свои внутренние контроллеры / конечные точки с помощью профиля. Наконец, если вы запускаете приложение в производственном режиме, вам не нужно ничего делать. API @Profile("dev") будут скрыты. Однако, если вы запускаете приложение локально или в среде тестирования, передайте следующий аргумент JVM:

-Dspring.profiles.active=dev

Если вы используете IntelliJ, вы можете передать его в конфигурациях Run / Debug:

В конце вы должны увидеть все свои API в качестве разработчика.

...