yapi 事件創建、修改等介面事件監聽

使用的yapi作為介面文檔平台。出於業務需求需要對介面創建、修改、刪除等事件進行監聽。

yapi已經實現並預留了這個口子,但是沒有找到實現的文檔。這裡進行簡單描述下使用的方式。

一、yapi創建、修改介面事件

根據yapi目前的開放實現機制,在plugin.js這個文件中提供了一些事件其中就有創建、修改介面的事件。

在創建介面時,會將介面的詳細資訊作為參數;當介面編輯更新時,會將編輯的介面的介面ID作為參數。詳細說明如下:

1.1 yapi 創建介面事件

    /**
     * 客戶端增加介面成功後觸發
     * @param data 介面的詳細資訊
     */
    interface_add: {
        type: 'multi',
        listener: []
    },

1.2 yapi更新介面事件

    /**
     * 客戶端更新介面成功後觸發
     * @param id 介面id
     */
    interface_update: {
        type: 'multi',
        listener: []
    },

二、提供介面事件的回調介面

這裡使用Springboot提供實現了兩個介面,分別是介面創建、介面編輯更新介面。根據自身業務需求當有介面創建、介面更新時進行實現邏輯即可。

public interface YApiCallbackFacade {

    /**
     * 創建介面
     *
     * @param data 創建介面參數資訊
     */
    @PostMapping("/api/yapi-callback/v1/interface/create")
    ResultBean<CreateInterfaceVo> createInterface(@RequestParam("data") data);

    /**
     * yapi更新
     *
     * @param apiId 更新介面的ID
     */
    @GetMapping("/api/yapi-callback/v1/interface/update")
    ResultBean<Boolean> updateInterface(@RequestParam("id") String apiId);

}

三、yapi調用回調介面

在觸發事件中實現調用回調介面的邏輯。

var hooks = {
    /**
     * 客戶端增加介面成功後觸發
     * @param data 介面的詳細資訊
     */
    interface_add: {
        type: 'multi',
        listener: [createInterface]
    },
   
    /**
     * 客戶端更新介面成功後觸發
     * @param id 介面id
     */
    interface_update: {
        type: 'multi',
        listener: [updateInterface]
    }
};

在兩個事件的listener中配置實現的方法。詳細方法如下:

/**
 * 創建介面
 * @param data
 */
function createInterface(data) {
    console.log(data);
    axios.post('//127.0.0.1/api/yapi-callback/v1/interface/create', {
        'data': JSON.stringify(data)
    }).then(response => {
        console.log(response.data)
    });
}

/**
 * 更新介面
 * @param data
 */
function updateInterface(data){
    axios.get('//127.0.0.1/api/yapi-callback/v1/interface/update?id='+data).then(response=>{
        console.log(response.data)
    });
}

創建介面時data的部分格式如下

{ 
	edit_uid: 0,
  status: 'undone',
  type: 'static',
  req_body_is_json_schema: false,
  res_body_is_json_schema: false,
  api_opened: false,
  index: 0,
  tag: [],
  method: 'GET',
  catid: 66,
  title: '人員資訊-test',
  path: '/api/person/info',
  project_id: 48,
  req_params: [],
  res_body_type: 'json',
  query_path: { path: '/api/person/info', params: [] },
  uid: 12,
  add_time: 1632543497,
  up_time: 1632543497,
  req_query: [],
  req_headers: [],
  req_body_form: [],
  _id: 5074,
  __v: 0 
}

這裡是介面創建時data的格式。

Tags: