swagger2 接口文檔,整個微服務接口文檔

1,由於整個微服務會有好多服務,好比會員服務,支付服務,訂單服務,每一個服務都集成了swaggerhtml

     咱們在訪問的時候,不可能每一個服務輸入一個url 去訪問,看起來很麻煩,因此咱們須要在一個頁面上集成整個微服務項目中全部的 swaggerjava

     效果圖:能夠選擇不一樣的應用,出來的是不一樣的swagger 接口文檔web

2,實現思路:spring

    zuul 網關 + swagger api

    客戶端訪問一個應用,zuul 網關轉發到相應的界面,看起來是在一個服務上的效果  服務器

3,eureka :註冊中心app

     springcloud-config:註冊中心:路由轉發用配置中心作的,沒有寫在本地。能夠參考springcloud-config 動態網關路由maven

     springcloud-api-member-impl-service:在eureka 註冊的服務是:app-aiyuesheng-memberide

     springcloud-api-order-impl-service:在eureka 註冊的服務是:app-aiyuesheng-orderspring-boot

     springcloud-swagger2:swagger 服務

     springcloud-zuul :zuul 網關服務

4,

第一步:

member 服務 和 order ,zuul 須要添加maven 依賴:

<dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>

第二步:   

member ,order 配置文件添加:

##swagger掃包 swagger: base-package: com.aiyuesheng.api.impl

第三步:

swagger 的接口類的寫法仍是同樣:

package com.aiyuesheng.api.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.aiyuesheng.entity.Order; import com.aiyuesheng.feign.OrderServiceFeign; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @RestController @Api("會員接口文檔") public class MemberServiceImpl { @Autowired private OrderServiceFeign orderServiceFeign; @ApiOperation("方法描述用例") @PostMapping("/swaggerIndex") public String swaggerMember() { return "swaggerIndex"; } @ApiOperation("參數描述用例") @ApiImplicitParam(name = "name", value = "用戶名", required = true, dataTypeClass = String.class) @GetMapping("/getAge") public String swaggerMemberParam(String userName) { return "chris"; } @RequestMapping("/") public String index() { return "app-aiyuesheng-member"; } // @HystrixCommand 默認開啓服務隔離,是以線程池方式 // @HystrixCommand 默認開啓服務降級,fallbackMethod 方法名就是服務的降級名稱 // @HystrixCommand 默認開啓服務熔斷機制 // @Hystrix 要禁止超時時間,默認1 秒,若是沒有即便響應,會走業務邏輯,可是也會走服務降級方法,因此要禁止超時時間
    @HystrixCommand(fallbackMethod = "orderServiceFallback") @RequestMapping("/getOrder") public Order getOrder(String orderId) { System.out.println("orderToUserInfo:" + "當前線程池名稱:" + Thread.currentThread().getName()); return orderServiceFeign.getOrder(orderId); } @RequestMapping("/getOrder2") public Order getOrder2(String orderId) { System.out.println("orderToUserInfo:" + "當前線程池名稱:" + Thread.currentThread().getName()); return orderServiceFeign.getOrder(orderId); } @RequestMapping("/orderServiceFallback") public String orderServiceFallback() { return "服務器繁忙,請稍後重試"; } }
View Code

order 由於以前由feign 客戶端調用,因此在父類裏面也要加@Api()註解:

package com.aiyuesheng.api.impl; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.aiyuesheng.api.IOrderService; import com.aiyuesheng.entity.Order; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @RestController @Api("訂單接口文檔") public class OrderServiceImpl implements IOrderService { @ApiOperation("方法描述用例") @PostMapping("/swaggerIndex") public String swaggerOrder() { return "swaggerIndex"; } @ApiOperation("參數描述用例") @ApiImplicitParam(name = "name", value = "用戶名", required = true, dataTypeClass = String.class) @GetMapping("/getAge") public String swaggerOrderrParam(String userName) { return "chris"; } @RequestMapping("/") public String index() { return "app-aiyuesheng-order"; } @RequestMapping("/getOrder") public Order getOrder(String orderId) { Order order = new Order(); order.setOrderId(orderId); order.setOrderName("訂單名稱"); return order; } }
View Code

父類:

@Api("訂單接口文檔") public interface IOrderService { @RequestMapping("/getOrder") public Order getOrder(String orderId); }

第四步:

啓動類加上註解@EnableSwagger2Doc

@SpringBootApplication @EnableEurekaClient @EnableFeignClients @EnableSwagger2Doc //生成swagger文檔
public class OrderApp { public static void main(String[] args) { SpringApplication.run(OrderApp.class, args); } }

第五步:配置zuul:

package com.aiyuesheng; import java.util.ArrayList; import java.util.List; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.cloud.netflix.zuul.filters.ZuulProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import com.spring4all.swagger.EnableSwagger2Doc; import springfox.documentation.swagger.web.SwaggerResource; import springfox.documentation.swagger.web.SwaggerResourcesProvider; @EnableZuulProxy @SpringBootApplication @EnableDiscoveryClient @EnableSwagger2Doc public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } // @Bean // public TokenFilter accessFilter() { // return new TokenFilter(); // }
 @RefreshScope @ConfigurationProperties("zuul") public ZuulProperties zuulProperties() { return new ZuulProperties(); } } @Component @Primary class DocumentationConfig implements SwaggerResourcesProvider { @Override public List<SwaggerResource> get() { List resources = new ArrayList<>(); resources.add(swaggerResource("app-aiyuesheng-member", "/api-member/v2/api-docs", "2.0")); resources.add(swaggerResource("app-aiyuesheng-order", "/api-order/v2/api-docs", "2.0")); 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; } }

zuul 的配置文件,回顧下,

spring: application: ####註冊中心應用名稱 name: service-zuul cloud: config: ####讀取後綴 profile: dev ####讀取config-server註冊地址 discovery: service-id: config-server enabled: true #####eureka服務註冊地址 eureka: client: service-url: defaultZone: http://localhost:8100/eureka server: port: 80 #配置手動實時刷新 #managementendpoints.web.exposure.include=* management: endpoints: web: exposure: include: "*"

配置中心上的路由轉發,回顧下:

### 配置網關反向代理 zuul: routes: api-member: ### 以 /api-member/訪問轉發到會員服務 path: /api-member/** serviceId: app-aiyuesheng-member api-order: ### 以 /api-order/訪問轉發到訂單服務 path: /api-order/** serviceId: app-aiyuesheng-order

 配置成功:訪問http://127.0.0.1/swagger-ui.html#/ 

由於網關是80,而後再轉發到對應的服務地址的

相關文章
相關標籤/搜索