跨系統資料以及API存取核心 data_api 套件

前言:

上一篇文章先列下了關於data_api的composer套件,這邊來記錄一下這個套件的開發緣由以及提供哪些功能

[作品][Laravel Packeage] data_api : 跨系統資料存取協議

還記得更早之前的一個套件scopFilter,他的出現是為了在大部分的時間更簡單的寫query條件

[作品][Laravel Packeage] ScopeFilter : 萬用的快速資料搜尋外掛

沒想到因為這個filter可以再更近一步被使用,因為我們開發的每一套系統都已經安裝的scopFilter,所以我們可以透過定義一個介面來驅動scopeFiter

近一步做到跨系統的資料存取,這也是data_api發展的最主要原因

規格

首先來說說data_api的規格,我們定義了幾項入口

  1. fetch入口
  2. get入口

fetch作為讓所有有裝data_api的系統統一呼叫的入口,開發者不用想太多直接call fetch就對了,而get才是目標系統實際上去把資料取出的地方

分類

data_api可以取得哪些資料呢?

  1. 目標系統透過filter可以拿到的範圍都沒有問題
  2. 目標系統有開放出來的process api,帶入token以及參數可以正確取得
  3. 存取n8n上設計好的訊息通知流程

 

使用方法

  1. 後端透過定義好的crossService可以直接傳入特定Dto存取特定資料
  2. 後端透過定義好的crossFacade也可以少去new service的步驟傳入特定Dto存取特定資料
  3. 後端透過command line 也提供各方法可用參數查詢

 

特色說明

我們在CrossService中設計了一個固定流程

也就每一個請求無論你要存取哪種資料都回經過這幾個步驟

  1. 儲存傳進來的payload
  2. 尋找目標系統URL
  3. 整理要送出的資料內容
  4. 實際將請求送出

這邊有幾點特別的可以說明,也就是上面提到的第三點跟第四點

這邊我們實作了兩個執行器,讓我來一一說明

第一個

dataStreamManager是第一個執行器,我們後透過傳進去給get的第二的參數判定這個參數的型態而動態生成所需要的Dto物件

這個get function收的第二個三數只是要實作PayloadContract的class物件都可以,而return值則是實作了DataStreamContract的class物件都可以

這樣一來我們就可以透過實際上傳入的Payload物件來判斷需要生成的Stream物件該是哪個型態

另一方面也可以規範好要實作PayloadContract的所有Payload都需要有一個fecth的方法,下一個步驟會提到

第二個

第四個步驟send是實際把資料送出去的環節,因為每個需求所需要的目標都不同,因此這邊還是留了一個彈性

透過上一個步驟生成的dataStreamServer物件,統一都呼叫fetch方法,這樣就能夠讓不同類型的物件實際上透過不同邏輯來發出請求

 

很特別的東西

1.因應各系統開放出來的不同api文件需求,我們設計透過command來取得不同系統中process api的參數使用方式

首先,各系統要開出來的process api都需要在controller function上加入attribute,就像這樣子

透過command lined 可以查詢每個系統的process api所需參數

 

command

 

2.因應n8n上串接的每個通知平台所需要的資料格式完全不同,即便是json也不好無腦寫出來,因此定義了一系列的Dto

透過這些Dto,我們可以輕鬆產出各平台所需要的json apyload

例如:

這樣的payload內容就會是slack的block訊息