idea同步y(tǒng)api插件的詳細(xì)步驟
1、前言
yapi是一個很好的接口文檔維護(hù)工具,其swagger功能,可將接口信息同步到y(tǒng)api平臺上,但是swagger的編寫,大量入侵代碼,也加大了開發(fā)工作量,目前調(diào)研了idea集成yapi同步工具,無需嵌入式編寫入侵代碼,根據(jù)javadoc備注即可將接口信息同步到y(tǒng)api同臺上
2、idea同步y(tǒng)api平臺工具
Idea支持將接口文檔同步到y(tǒng)api目前找到三個,easyapi、YapiUpload、idea yapi
- easyapi:同步接口信息到postman以及yapi平臺上,但是同步y(tǒng)api的不支持多模塊同步;
- YapiUpload:同步y(tǒng)api的配置需要寫配置文件,不利于維護(hù);
- idea yapi:是基于YapiUpload的二次開發(fā),將原有xml配置方式改為 Setting 中配置,并配置持久化,將原本上傳的數(shù)據(jù)類型做了優(yōu)化,上傳后數(shù)據(jù)類型為js的數(shù)據(jù)類型。
綜上優(yōu)缺點(diǎn),可采用idea yapi,如果有特殊需求可安裝easyapi同步到postman進(jìn)行接口調(diào)試
3、idea-yapi安裝步驟
3.1、安裝idea-yapi
在idea-Preferences-Plugins中搜索idea-yapi,安裝,并重啟idea
3.2、配置idea-yapi
在idea-Preferences-Other Setting中找到Y(jié)apiSetting
配置說明如下:
如果你是項(xiàng)目只是同步dubbo/api,采用如下配置
{ "isSingle": true, "singleConfig": { "projectToken": "yapi平臺的項(xiàng)目token地址", "projectId": "yapi平臺的項(xiàng)目id", "yApiUrl": "yapi平臺平臺地址", "menu": "同步到的接口的目錄", "projectType": "你的接口類型或者dubbo" }, "multipleConfig": { "api": { "projectToken": "", "projectId": "", "yApiUrl": "", "menu": "", "projectType": "" }, "api": { "projectToken": "", "projectId": "", "yApiUrl": "", "menu": "", "projectType": "" } } }
如果你是項(xiàng)目即同步dubbo又有api,采用如下配置
{ "isSingle": false, "singleConfig": { "projectToken": "", "projectId": "", "yApiUrl": "", "menu": "", "projectType": "" }, "multipleConfig": { "接口所在包名稱: { "projectToken": "yapi平臺的項(xiàng)目token地址", "projectId": "yapi平臺的項(xiàng)目id", "yApiUrl": "yapi平臺平臺地址", "menu": "api接口文檔", "projectType": "api" }, "dubbo所在包名稱": { "projectToken": "yapi平臺的項(xiàng)目token地址", "projectId": "yapi平臺的項(xiàng)目id", "yApiUrl": "yapi平臺平臺地址", "menu": "dubbo文檔", "projectType": "dubbo" } } }
備注:查找token以及項(xiàng)目id的目錄
3.3、同步接口或者dubbo
找到對應(yīng)的接口所在的方法入口或者dubbbo的定義方法,即可
比如:同步下面的接口
效果如下:
4、idea-yapi支持規(guī)則配置以及實(shí)例
4.1、規(guī)則配置
1:插件如何生成屬性備注 ,通過獲得字段備注中的注釋
/** * 年齡 */ private Integer age;
2:插件如何生成接口名稱,通過接口上的注釋,或者引用上的 注釋
/** * 添加或更新課程數(shù)據(jù) * * @param courseOpt * @return {@link CommonRes} */ @RequestMapping(value = "/test", method = RequestMethod.POST) public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){ } /** * @description: 添加或更新課程數(shù)據(jù) (@Description 也可) * @param: [CourseParam] * @return: Course * @date: 2018/3/15 */ @RequestMapping(value = "/test", method = RequestMethod.POST) public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){ } @RequestMapping(value = ICourse.ADD_OR_UPDATA_COURSE, method = RequestMethod.POST) public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){ } public interface ICourse{ /** * @description: 添加或更新課程數(shù)據(jù) (@Description 也可) * @param: [CourseParam] */ ADD_OR_UPDATA_COURSE="test"; }
3:@link 參數(shù)定義展示在字段備注中
第一種@link 方式
/** * 狀態(tài) {@link com.xxx.constant.StatusConstant} */ private Integer status;
第二種@link 方式
import com.xxx.constant.StatusConstant; /** * 狀態(tài) {@link StatusConstant} */ private Integer status;
不支持方式
import com.xxx.constant.*; /** * 狀態(tài) {@link StatusConstant} */ private Integer status;
4:實(shí)現(xiàn)自定義分類
通過在方法或類注釋中加 @menu 注釋實(shí)現(xiàn),優(yōu)先級 方法>類>package 下面或者上面的@menu,如果沒有自定義 默認(rèn)為tool-tmp,支持多級分類(多級分類只能是crazy 分支的yapi)
package com.project.demo; /** * @menu 這里填寫類分類名稱 */ import com...... /** *@description: 用戶控制器 *@menu 這里填寫類分類名稱 */ @RestController public class UserController { /** * @description: 新增用戶 * @param: [User] * @menu: 這里填寫方法級別分類名稱(比如 多級目錄/menu/menu1/menu2) * @return: Response<UserDTO> * @date: 2018/3/15 */ @RequestMapping(value = "/addUser", method = RequestMethod.POST) public Response<UserDTO> addUser(@RequestBody User user){ } }
5:支持注解
String RequestMapping="org.springframework.web.bind.annotation.RequestMapping"; String GetMapping="org.springframework.web.bind.annotation.GetMapping"; String PostMapping="org.springframework.web.bind.annotation.PostMapping"; String PutMapping="org.springframework.web.bind.annotation.PutMapping"; String DeleteMapping="org.springframework.web.bind.annotation.PutMapping.DeleteMapping"; String PatchMapping="org.springframework.web.bind.annotation.PutMapping.PatchMapping"; String RequestBody="org.springframework.web.bind.annotation.RequestBody"; String RequestParam="org.springframework.web.bind.annotation.RequestParam"; String RequestHeader="org.springframework.web.bind.annotation.RequestHeader"; String RequestAttribute="org.springframework.web.bind.annotation.RequestAttribute"; String PathVariable="org.springframework.web.bind.annotation.PathVariable"; String NotNull="javax.validation.constraints.NotNull"; String NotEmpty="javax.validation.constraints.NotEmpty"; String NotBlank="javax.validation.constraints.NotBlank";
支持Request Param 注解
生成的 uid 和bid 備注為 用戶id(Integer),baby id(Integer) 如果沒有備注,則只有(Integer)
/** * 測試RequestHeader desc 規(guī)范的多個 * @param uid 用戶id * @param bid baby id * @param request * @param response */ @RequestMapping(value = "/testRequestDesc4") public void testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){ }
支持@status注解
支持已發(fā)布(done),設(shè)計(jì)中(design),開發(fā)中(undone),已提測(testing),已過時(deprecated),暫停開發(fā)(stoping),支持中英文 (crazy 分支),新增接口默認(rèn) 開發(fā)中,更新時如果沒有寫status情況下默認(rèn)使用當(dāng)前狀態(tài)
/** * 測試RequestHeader desc 規(guī)范的多個 * @param uid 用戶id * @status 開發(fā)中 (或者 undone) * @param request * @param response */ @RequestMapping(value = "/testRequestDesc4") public void testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){ }
6:項(xiàng)目中通過fitler或攔截器或注解等 實(shí)現(xiàn)全局統(tǒng)一響應(yīng)對象 返回如何處理
在misc.xml 中配置 returnClass ,值為全局統(tǒng)一響應(yīng)對象全路徑。比如下面代碼如果配置了returnClass 為GlobalResponse ,那么他生成的yapi 響應(yīng)對象為,GlobalResponse
/** * 測試RequestHeader desc 規(guī)范的多個 * @param uid 用戶id * @status 開發(fā)中 (或者 undone) * @param request * @param response */ @RequestMapping(value = "/testRequestDesc4") public Integer testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){ } public class GlobalResponse<T> { private String status; private String code; private T data; ...... }
7:swagger 支持
目前1.7.7以上支持以下注解
String API_OPERATION = "io.swagger.annotations.ApiOperation"; String API_MODEL_PROPERTY = "io.swagger.annotations.ApiModelProperty"; String API_PARAM = "io.swagger.annotations.ApiParam";
4.2、實(shí)例
4.2.1、get方式
/** * get方式 * * @param param1 參數(shù)1的名稱或描述 * @param param2 參數(shù)2的名稱或描述 * @param param3 參數(shù)3的名稱或描述 * @return 響應(yīng)描述 * @author 蘇葉 * @date 2019-12-29 17:24 */ @RequestMapping(value = "/pathOfApi1", method = RequestMethod.GET) public Response<GuideResult> methodName1(@RequestParam String param1, @RequestParam String param2, @RequestParam(required = false, defaultValue = "android") String param3) { return new Response<GuideResult>(); }
效果
4.2.2、Post方式
/** * post方式 * * @param jsonModel 入?yún)?shù) * @return 通用返回 * @author 蘇葉 * @date 2019-12-29 17:20 */ @Deprecated @RequestMapping(value = "/pathOfApi2", method = RequestMethod.POST) public Response methodName2(@RequestBody MockDtoOrVo jsonModel) { return new Response(); }
MockDtoOrVo 入?yún)?/p>
/** * moke說明 * * @author 蘇葉 * @version 1.0 * @date 2019-12-29 16:58 */ @Data @ToString public class MockDtoOrVo { /** * 字段注釋 */ private Long field1; /** * 字段注釋 */ private Double field2; /** * 某個枚舉 * {@link com.kaishustory.userx.common.constant.ClientForm} */ private int field3; /** * 當(dāng)目標(biāo)枚舉字段與當(dāng)前字段名不一致,額外指定 * * @see com.kaishustory.userx.common.constant.ClientForm#ANDROID */ private int field4; /** * 可以用注解`@Deprecated`來表示字段被廢棄 * 也可以用注釋`@deprecated` * * @deprecated It's a secret */ @Deprecated private int field5; /** * 如果使用javax.validation的話 * 可以使用@NotBlank/@NotNull表示字段必須 */ @NotBlank @NotNull private String field6; }
效果
5、EasyApi安裝步驟
5.1、安裝EasyApi
在idea-Preferences-Plugins中搜索easyapi,安裝,并重啟idea
5.2、創(chuàng)建postmantoken獲取token
5.3、配置easyapi導(dǎo)出postman
5.4、項(xiàng)目配置
實(shí)例在moudle下面配置如下
在對應(yīng)的controller文件右鍵-genernate - export postman,即可
生成對應(yīng)目錄的請求配置
具體的方法注釋:
https://github.com/diwand/YapiIdeaUploadPlugin/wiki/%E5%BF%AB%E9%80%9F%E4%BD%BF%E7%94%A8
到此這篇關(guān)于idea同步y(tǒng)api插件的文章就介紹到這了,更多相關(guān)idea同步y(tǒng)api插件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
里氏代換原則_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了里氏代換原則的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08idea自帶Jacoco/idea自動測試語句覆蓋率方法(使用詳解)
這篇文章主要介紹了idea自帶Jacoco/idea自動測試語句覆蓋率方法,本文給大家分享使用方法,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Sleuth(Micrometer)+ZipKin分布式鏈路問題小結(jié)
在微服務(wù)架構(gòu)中,分布式鏈路追蹤技術(shù)成為了解決系統(tǒng)復(fù)雜調(diào)用問題的關(guān)鍵,本文介紹了其他鏈路追蹤方案,如Cat、Pinpoint和Skywalking,展示了分布式鏈路追蹤技術(shù)的多樣化,感興趣的朋友一起看看吧2024-10-10SpringBoot Redis實(shí)現(xiàn)接口冪等性校驗(yàn)方法詳細(xì)講解
這篇文章主要介紹了SpringBoot Redis實(shí)現(xiàn)接口冪等性校驗(yàn)方法,近期一個老項(xiàng)目出現(xiàn)了接口冪等性校驗(yàn)問題,前端加了按鈕置灰,依然被人拉著接口參數(shù)一頓輸出,還是重復(fù)調(diào)用了接口,通過復(fù)制粘貼,完成了后端接口冪等性調(diào)用校驗(yàn)2022-11-11將Java程序的輸出結(jié)果寫入文件方法實(shí)例
這篇文章主要給大家介紹了關(guān)于將Java程序的輸出結(jié)果寫入文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Java 1.8使用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列
這篇文章主要為大家詳細(xì)介紹了Java 1.8使用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-10-10Eclipse引用XSD實(shí)現(xiàn)XML配置文件提示標(biāo)簽的方法
今天小編就為大家分享一篇關(guān)于Eclipse引用XSD實(shí)現(xiàn)XML配置文件提示標(biāo)簽的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03