Сегментация API на Swagger

У меня вопрос по поводу чванства приложений с микросервисной архитектурой. Приложение создано с помощью JHipster. Поскольку у моего серверного приложения много конечных точек, загрузка этих конечных точек в swagger невозможна (все приложение шлюза застревает). Итак, моя идея - создать какие-то группы конечных точек на Swagger (фильтры). На данный момент элемент API из раскрывающегося списка в приложении шлюза открывает пользовательский интерфейс Swagger с двумя элементами: элементом по умолчанию (/ v2 / api-docs) и элементом службы (/ service / v2 / api-docs). Щелчок по второму элементу приводит к зависанию полного приложения шлюза, загружая все конечные точки. Итак, я попытался сделать несколько выпадающих элементов вместо одного элемента (service (service / v2 / api-docs)). Я следовал этому руководству: https://piotrminkowski.wordpress.com/2017/04/14/microservices-api-documentation-with-swagger2/ Итак, в моем приложении шлюза у меня есть GatewaySwaggerResourceProvider:

@Override
public List<SwaggerResource> get() {
    List<SwaggerResource> resources = new ArrayList<>();

    //Add the default swagger resource that correspond to the gateway's own swagger doc
    resources.add(swaggerResource("default", "/v2/api-docs"));

    //Add the registered microservices swagger docs as additional swagger resources
    List<Route> routes = routeLocator.getRoutes();
    routes.forEach(route -> {
        resources.add(swaggerResource(route.getId(), route.getFullPath().replace("**", "v2/api-docs")));
    });

    return resources;
}

В моем основном классе шлюза я поместил:

@Bean
UiConfiguration uiConfig() {
    return new UiConfiguration("validatorUrl", "list", "alpha", "schema",
        UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L);
}

В основном классе моего приложения микросервиса (серверного приложения) я поместил Docket @Bean, который фильтрует только конечные точки из определенного пакета:

@Bean
public Docket api() throws IOException {
    return new Docket(DocumentationType.SWAGGER_2)
        .groupName("product")
        .select()
        .apis(RequestHandlerSelectors.basePackage("kango.web.rest"))
        .paths(PathSelectors.ant("/product-types/*"))
        .build()
        .apiInfo(apiInfo());
}

После этого я перезапустил оба приложения, и Swagger по-прежнему показывает два начальных элемента в раскрывающемся списке. Мне нужно иметь несколько элементов с похожими группами конечных точек.

Я потерял много времени и тщательно исследовал, прежде чем спросить, так что, пожалуйста, помогите мне ...


person milkiR    schedule 16.08.2017    source источник


Ответы (1)


вы можете определить теги в @Api, чтобы сгруппировать их. но он не даст вам другого файла json. чтобы получить отдельный json для каждой сегрегации, здесь это пример

в этом примере я создаю SpringFox Docket Bean динамически, сканируя @RestController и группируя их по классам контроллера. вы можете иметь свою собственную стратегию группировки, определяя пользовательские аннотации и просматривая их.

person Asad Abdin    schedule 12.09.2018