中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Cloud微服務接口管理工具

發布時間:2020-06-10 15:36:57 來源:億速云 閱讀:875 作者:元一 欄目:編程語言

前言

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud并沒有重復制造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

根據各個微服務功能邊界定義的不同,有些微服務會提供與具體業務相關的接口,如支付接口、賬戶接口等;而有些微服務則會提供一些公共性質的服務接口,如短信接口、統一認證接口之類。而這些微服務往往又是由多個不同的團隊在開發維護,傳統方式下服務接口的定義往往需要服務提供方提供良好的、可閱讀性比較高的接口文檔才可以比較方便地對接和測試,而事實上,隨著時間的推移、人員的迭代更新,很多情況下這些早期的接口文檔往往很快就會因為無人維護而過時,即便不過時,微服務模式下這樣的方式也會因為服務接口文檔太多而讓開發人員顯得抓狂!

那么有沒有一種更便捷地方式,可以讓開發接口的同時,自動就能生成與服務接口高度一致的文檔來呢?答案是有的,接下來就和大家一起聊聊到底有什么樣方式可以讓微服務的接口管理變得更加容易些!

接口管理方式介紹

事實上,市面上已經有多種開源項目提供了這樣的支持!如:Swagger、ApiDoc、RAP、DOCLever、CrapApi等,這些項目都提供了對于Api在線文檔的管理功能,那么在Spring Cloud體系中哪一種方式更加適合呢?下面,我們一起來對比下這些項目的優缺點。

Swagger

Swagger是一款基于YAML、JSON語言的文檔在線生成和代碼自動生成的工具。它的優點如下:

1)、它可以直接嵌入在Spring Boot項目中,通過開發時編寫注釋,從而自動生成接口文檔,實現代碼與文檔的高度一致;
2)、可以分析接口的結構,并且還可以通過發起請求來驗證接口的正確性;
3)、它提供了多種編程語言的前后端分離解決方案,支持根據定義的接口導出各種語言的服務端或客戶端代碼 ;
4)、它還包括了Swagger Editor,這是使用yaml語言的Swagger API的編輯器,支持導出yaml和json格式的接口文件;
5)、包含了Swagger UI,它可以將Swagger Editor編輯好的接口文檔以html的形式展示出來;
6)、免費開源,支持國際化,生態豐富、社區活躍;

它的缺點是:

1)、對代碼有侵入性;
2)、不同項目的Swagger接口文檔是分離的,需要到不同的地方去找;
3)、Swagger UI展現出來的接口文檔缺乏分類,使用體驗比較差;
4)、不同項目的接口文檔沒有權限管理,缺少Mock;

ApiDoc

ApiDoc是一款輕量級的類似于Swagger的在線文檔生成工具。其缺點也類似于Swagger,接口管理、自動測試等功能也比較弱,并且其社區、生態國際化方面都還不如Swagger。

RAP

RAP是一個可視化接口管理工具,它可以通過分析接口結構,動態生成模擬數據,校驗真實接口正確性,圍繞接口定義,通過一系列自動化工具提升微服務模式下的協作效率。

它的優點如下:

1)、支持項目管理、團隊管理、文檔版本管理;
2)、支持Mock測試數據;
3)、阿里大廠出品,在阿里巴巴內部得到實踐;
4)、支持接口檢索;
5)、可以分析接口結構,發起請求校驗接口的正確性;
6)、免費開源

缺點如下:

1)、文檔和接口分離,很容易出現不一致的現象;
2)、每個接口都需要手工編輯;
3)、后端采用nodejs編寫,與基于Java的Spring Cloud技術棧不一致;

DOCLever

DOCLever也是一個免費開源的接口管理工具,它的優點如下:

1)、支持項目管理、團隊管理、文檔工具豐富;
2)、支持豐富的Mock測試數據;
3)、用戶案例也比較豐富:滴滴、美團、58同城、同城旅游等;
4)、支持接口檢索;
5)、可以分析接口的結構、發起請求校驗接口正確性、參數也很豐富;
6)、支持復雜場景的自動化測試,比如獲取驗證碼、登陸,獲取訂單列表,甚至獲取某個特定訂單詳情等上下文關聯的操作;

缺點如下:

1)、文檔和接口分離,很容易出現不一致的現象;
2)、每個接口都需要手工編輯;
3)、后端也是采用nodejs編寫,與Spring Cloud的Java技術棧不符;

CrapApi

優點如下:

1)、支持項目管理、團隊管理、文檔版本管理;
2)、支持Mock測試數據;
3)、支持接口檢索;
4)、可以分析接口結構、發起請求校驗接口的正確性;
5)、支持接口監控、設置報警規則,接口不可用時及時通知服務負責人;
6)、后端基于Java開發,與Spring Cloud技術棧Java匹配;
7)、免費開源;

缺點:

1)、文檔和接口分離,很容易出現不一致的現象;
2)、每個接口都需要手工編輯;
3)、使用案例較少,功能不夠完善,可能會有很多坑;

Spring Cloud集成Swagger

通過對上述開源項目的分析,除Swagger外其余項目采取的都是文檔和代碼分離的方式,雖然這樣會減少對代碼的侵入,但是也會造成文檔和代碼的不一致現象,所以在基于Spring Cloud的微服務項目中,我們選擇Swagger作為微服務接口管理工具。

那么基于Spring Boot的Spring Cloud微服務該如何集成Swagger呢?

1)、在Spring Boot微服務項目中引入Maven依賴:

 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-swagger2</artifactId>
     <version>2.2.2</version>
 </dependency>
 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-swagger-ui</artifactId>
     <version>2.2.2</version>
 </dependency>

2)、創建Swagger2配置類:

@Configuration
@EnableSwagger2
@Profile("!production")
public class SwaggerConfiguration {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("Api")
                .select()
                .apis(withClassAnnotation(RestController.class))
                .build()
                .globalOperationParameters(commonParameters())
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Api")
                .version("1.0.0-SNAPSHOT")
                .build();
    }

    private List<Parameter> commonParameters() {
        List<Parameter> parameters = Lists.newArrayList();
        parameters.add(new ParameterBuilder()
                .name("war")
                .description("backdoor 在測試環境繞過鑒權")
                .modelRef(new ModelRef("string"))
                .parameterType("query")
                .required(false)
                .defaultValue("war123")
                .build());
        parameters.add(new ParameterBuilder()
                .name("uid")
                .description("backdoor 設定的用戶ID")
                .modelRef(new ModelRef("string"))
                .parameterType("query")
                .required(false)
                .defaultValue("1000053")
                .build());
        parameters.add(new ParameterBuilder()
                .name("Authorization")
                .description("生產環境中,需要傳遞的用戶當前 Token")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .defaultValue("Bearer XXXXX")
                .build());
        return parameters;
    }
}

以上配置類中,我們可以通過@Profile("!production")注解指定生效的環境,如這里我們設置除在生產環境外,其他環境都生效。

3)、添加文檔內容

在完成上述配置后,其實已經可以生產文檔內容了,但是這樣的文檔主要針對請求本身,描述的主要來源是函數的命名,多用戶并不友好,為了讓文檔更加易于閱讀和理解,我們可以通過Swagger注解來增加一些說明。這些注解主要有:

@Api:用在類上,說明該類的作用。@ApiOperation:注解來給API增加方法說明。
br/>@ApiImplicitParam:用來注解來給方法入參增加說明。<br/@ApiResponses:用于表示一組響應。@ApiResponse:用在@ApiResponses中,一般用于表達一個錯誤的響應信息。<br/" rel="nofollow">br/>@ApiResponse:用在@ApiResponses中,一般用于表達一個錯誤的響應信息。<br/@ApiModel:描述一個Model的信息(一般用在請求參數無法使用@ApiImplicitParam注解進行描述的時候)。

接下來,我們通過一個實際的微服務接口定義案例來演示下:

@Api(value = "運維端系統用戶層外部接口", description = "用于組裝直接面向運維App端相關服務")
@RestController
@Slf4j
public class OperationUserController {

    @Autowired
    OperationUserService operationUserServiceImpl;

    @ApiOperation(value = "運維端用戶注冊", httpMethod = "POST")
    @RequestMapping(value = "/userRegister", method = RequestMethod.POST)
    public APIResponse sysUserRegister(@RequestParam(value = "mobileNo") String mobileNo,
            @RequestParam(value = "email") String email,
            @RequestParam(value = "nickName", required = false) String nickName,
            @RequestParam(value = "idName") String idName, @RequestParam(value = "idType") String idType,
            @RequestParam(value = "idNo") String idNo, @RequestParam(value = "gender") String gender,
            @RequestParam(value = "password") String password, @RequestParam(value = "verifyCode") String verifyCode,
            @RequestParam(value = "creator") String creator) {
        UserRegisterReqVo userRegisterReqVo = UserRegisterReqVo.builder().mobileNo(mobileNo).email(email)
                .nickName(nickName).idName(idName).idType(idType).idNo(idNo).gender(gender).passwd(password)
                .passcode(verifyCode).creator(creator).build();
        UserRegisterResVo userRegisterResVo;
        try {
            userRegisterResVo = operationUserServiceImpl.userRegister(userRegisterReqVo);
        } catch (BizException e) {
            log.error(e.toString() + "_" + e.getMessage(), e);
            return APIResponse.error(e.getCode(), e.getMessage());
        } catch (Exception e) {
            log.error(e.toString() + "_" + e.getMessage(), e);
            return APIResponse
                    .error(ApiResultStatus.INTERNAL_SERVER_ERROR.getApiResultStatus(),
                            ApiResultStatus.INTERNAL_SERVER_ERROR.getMessageResourceName());
        }
        return APIResponse
                .success(ApiResultStatus.SUCCESS.getApiResultStatus(), ApiResultStatus.SUCCESS.getMessageResourceName(),
                        userRegisterResVo);
    }
}

以上我們在微服務下定義了一個用戶注冊接口,此時啟動微服務,然后輸入微服務的IP+端口+/swagger-ui.html,就可以看到Swagger-UI了。通過Swagger-UI我們就可以校驗的方式測試接口了,同時因為接口字段都在UI有說明和暫時,并且是與實際代碼完全一致的,所以在對接時基于這些接口定義進行對接就可以了!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余江县| 神农架林区| 勃利县| 海阳市| 延长县| 康定县| 聊城市| 瓦房店市| 南部县| 芜湖县| 陕西省| 乐山市| 额尔古纳市| 专栏| 青州市| 德格县| 中西区| 湖州市| 来宾市| 安西县| 安平县| 朔州市| 望都县| 社会| 丰宁| 神木县| 钟祥市| 逊克县| 西吉县| 昌宁县| 剑河县| 徐州市| 读书| 蓬溪县| 湖口县| 崇文区| 渭南市| 将乐县| 伊宁县| 通化县| 柘城县|