前言
你有沒有遇到過這種情況,接手的項目沒有接口文檔,老闆突然有一天讓你梳理出該項目的所有接口文檔,你該怎麼弄?有沒有什麼快速便捷的方式?是否可以通過代碼直接逆向生成接口文檔呢?方法當然有啦!!
IDEA內建EasyYapi插件
可以通過 IntelliJ IDEA 內建 EasyYpai 插件實作接口文檔的快速生成,詳細步驟如下:
①EasyYapi插件安裝:打開Idea---> Preferences(Settings) ---> Plugins ---> 搜尋 EasyYApi 插件,點選 Install 進行安裝
②安裝完成後重新開機Idea,插件生效
③EasyYapi插件配置:插件配置之前,您需要搭建好 Yapi 網站,具體安裝步驟可自行上網查找。
打開Idea---> Preferences(Settings) ---> Other Settings ---> EasyYapi,配置Yapi的server位址,如http://localhost:9090
④EasyYapi生成接口文檔:接下來就是見證奇迹的時刻,找到要生成接口文檔的Controller,在類上滑鼠右鍵,單擊 EasyApi--->Export Api
在彈出的視窗中我們可以看到接口清單,點選綠色的小對勾,會提示我們輸入Private Token
打開Yapi網站項目,找到設定--->token配置,複制token到idea視窗中,點選确定
我們可以看到控制台提示接口導出成功
打開Yapi網站,接口全部自動生成完成,包括接口分類、接口名稱、接口位址、Mock位址、接口說明、請求參數Header、請求參數Body、傳回資料、建立人、建立時間、是不是很友善快捷。
參考示例代碼
接口文檔的自動生成是有一定規則的,可以參與如下示例代碼,也可以參考 EasyYapi官方網站說明 https://easyyapi.com/documents/index.html
【YapiTestController.java】
import com.busi.monitor.response.BaseResponse;
import com.busi.monitor.vo.InParamData;
import com.busi.monitor.vo.OutParamData;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* 接口分類名稱
* 分類備注/描述:自動生成接口文檔
*
* @author 八零後瑣話
* @date: 2023-06-17
*/
@RestController
@RequestMapping(value = "/easyApi")
public class YapiTestController {
/**
* testApi001接口名稱
*
* 我是api接口描述,這個描述内容很長
* @param param1 參數1的名稱或描述
* @param param2 參數2的名稱或描述
* @param param3 參數3的名稱或描述
* @return 響應描述
*/
@RequestMapping(value = "/testApi001")
public BaseResponse testApi001(
@RequestParam long param1,
@RequestParam(defaultValue = "八零後瑣話") String param2,
@RequestParam(required = false) String param3){
// param2 可以用`@link`來表示目前參數的取值是某個枚舉 {@link some.enum.or.constant.class}
// param3 當目标枚舉字段與目前字段名不一緻,額外指定 {@link some.enum.or.constant.class#property1}
return new BaseResponse<>(param2);
}
/**
* testApi002接口名稱
*
* 預設使用`application/x-www-form-urlencoded`,
* 對于`@RequestBody`将使用`application/json`,
* 可以用注解`@Deprecated`來表示api廢棄,
* 也可以用注釋`@deprecated`。
* @deprecated 改用{@link #testApi003(InParamData)}
*/
@Deprecated
@RequestMapping(value = "/testApi002")
public BaseResponse testApi002(@RequestBody InParamData inData){
return new BaseResponse<>(new OutParamData());
}
/**
* testApi003接口名稱
* 我一個是測試接口,主要勝于生成接口文檔
*/
@RequestMapping(value = "/testApi003")
public BaseResponse<OutParamData> testApi003(@RequestBody @Valid InParamData in) {
return new BaseResponse<>(new OutParamData());
}
}
【BaseResponse.java】
package com.busi.monitor.response;
import javax.validation.constraints.NotBlank;
/**
* @description: 通用傳回資訊
* @author: 八零後瑣話
* @date: 2023-06-17
*/
public class BaseResponse<T> {
/**
* 傳回碼 0000:成功,其他為失敗
*/
@NotBlank
private String code;
/**
* 傳回資訊
*/
@NotBlank
private String message;
/**
* 擴充傳回碼
*/
private String extraCode;
/**
* 擴充傳回資訊
*/
private String extraMessage;
/**
* 傳回詳細資訊
*/
private T data;
public BaseResponse(T data) {
this.code = "200";
this.message = "ok";
this.data = data;
}
}
【InParamData.java】
package com.busi.monitor.vo;
import javafx.beans.DefaultProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @description: 請求資訊
* @author: 八零後瑣話
* @date: 2023-06-17
*/
@Getter
@Setter
public class InParamData {
/**
* 使用者名
*/
@NotBlank
private String userName;
/**
* 年齡
*/
private Integer age;
/**
* 是否新人
*/
@NotBlank
private boolean isNew;
}
【OutParamData.java】
package com.busi.monitor.vo;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @description: 傳回資訊
* @author: 八零後瑣話
* @date: 2023-06-17
*/
@Getter
@Setter
public class OutParamData {
/**
* 詳細資訊
*/
@NotBlank
private String info;
/**
* 校驗結果
*/
private boolean checkResult = false;
}
寫在最後
假如說接口請求參數的Header中,要求有token等其他共用參數,我們該如何生成接口文檔呢?