Swagger консолидация для нескольких микросервисов
У меня есть несколько микросервисов, для которых чванство уже реализовано. Я хотел бы принести все API-интерфейсы под один интерфейс чванства. Я следовал по следующей ссылке для этого. но попробовал в мавене подход в стс. Swagger Consilidation Github пример
Вот мои разные файлы в проекте,
@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
@EnableSwagger2
public class SgtestApplication {
public static void main(String[] args) {
SpringApplication.run(SgtestApplication.class, args);
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.cloud")))
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.security")))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Single swagger")
.description("API to retrieve swagger apis")
.version("1.0.0")
.build();
}
}
Мой поставщик ресурсов выглядит следующим образом,
@Component
@Primary
@EnableAutoConfiguration
public class GatewaySwaggerResourceProvider implements SwaggerResourcesProvider {
@Autowired
private SwaggerServicesConfig swaggerServiceList;
public GatewaySwaggerResourceProvider() {
}
@Override
public List<SwaggerResource> get() {
List<SwaggerResource> resources = new ArrayList<>();
List<SwaggerServices> servList=swaggerServiceList.getServiceList();
for (SwaggerServices swaggerServices : servList) {
resources.add(swaggerResource(swaggerServices.getName(), swaggerServices.getUrl(),swaggerServices.getVersion()));
}
/*swaggerServiceList.getServiceList().forEach(service -> {
resources.add(swaggerResource(service.getName(), service.getUrl(), service.getVersion()));
});*/
return resources;
}
private SwaggerResource swaggerResource(String name, String location, String version) {
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion(version);
return swaggerResource;
}
}
и наконец моя конфигурация сервиса,
@Component
@EnableAutoConfiguration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "documentation.swagger")
public class SwaggerServicesConfig {
List<SwaggerServices> swagger;
public List<SwaggerServices> getServiceList() {
return swagger;
}
public void setServiceList(List<SwaggerServices> swaggerResources) {
this.swagger = swaggerResources;
}
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "documentation.swagger.services")
public static class SwaggerServices {
private String name;
private String url;
private String version;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
@Override
public String toString() {
return "SwaggerServices [name=" + name + ", url=" + url + ", version=" + version + "]";
}
}
}
в моем application.yml я указываю конечную точку api docs различных микросервисов.
spring:
profiles: default
server:
port: 8014
documentation:
swagger:
service-list:
- name: local-swagger
url: http://localhost:8085/v2/api-docs
version: 1.0
и мой вывод выглядит следующим образом,
кто-то может мне помочь, что я тут делаю неправильно? Я могу получить быстрый пользовательский интерфейс, но он не показывает список API в этом. Я новичок в чванстве, поэтому, пожалуйста, просмотрите мою программу.
0 ответов
Попробуйте это: https://dev.to/eon/how-to-consolidate-api-documentation-in-a-spring-boot-microservices-environment-dgd Я пытался решить эту проблему ранее и в итоге создал это инструмент с открытым исходным кодом.
Я думаю, что есть ошибка CORS. Пожалуйста, укажите исходный заголовок CORS для всех ваших сервисов документации Swagger.
Для лучшего подхода: вместо явного указания URL-адреса микро-сервисов. Зарегистрируйте все сервисы в Сервисном регистре и получите все данные вашего экземпляра. Это лучший подход для централизованного чванства.
Для справки: https://github.com/GnanaJeyam/microservice-patterns/tree/master/centralized-swagger-docs