使用的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('https://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('https://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的格式。