天天看點

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

作者:八零後瑣話

前言

你有沒有遇到過這種情況,接手的項目沒有接口文檔,老闆突然有一天讓你梳理出該項目的所有接口文檔,你該怎麼弄?有沒有什麼快速便捷的方式?是否可以通過代碼直接逆向生成接口文檔呢?方法當然有啦!!

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

IDEA內建EasyYapi插件

可以通過 IntelliJ IDEA 內建 EasyYpai 插件實作接口文檔的快速生成,詳細步驟如下:

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

①EasyYapi插件安裝:打開Idea---> Preferences(Settings) ---> Plugins ---> 搜尋 EasyYApi 插件,點選 Install 進行安裝

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

②安裝完成後重新開機Idea,插件生效

③EasyYapi插件配置:插件配置之前,您需要搭建好 Yapi 網站,具體安裝步驟可自行上網查找。

打開Idea---> Preferences(Settings) ---> Other Settings ---> EasyYapi,配置Yapi的server位址,如http://localhost:9090

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

④EasyYapi生成接口文檔:接下來就是見證奇迹的時刻,找到要生成接口文檔的Controller,在類上滑鼠右鍵,單擊 EasyApi--->Export Api

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

在彈出的視窗中我們可以看到接口清單,點選綠色的小對勾,會提示我們輸入Private Token

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

打開Yapi網站項目,找到設定--->token配置,複制token到idea視窗中,點選确定

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

我們可以看到控制台提示接口導出成功

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

打開Yapi網站,接口全部自動生成完成,包括接口分類、接口名稱、接口位址、Mock位址、接口說明、請求參數Header、請求參數Body、傳回資料、建立人、建立時間、是不是很友善快捷。

幹貨:IDEA內建EasyYapi插件逆向生成接口文檔

參考示例代碼

接口文檔的自動生成是有一定規則的,可以參與如下示例代碼,也可以參考 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等其他共用參數,我們該如何生成接口文檔呢?

繼續閱讀