使用 Composer 製作取得病歷 API
前言
最近有遇到客戶會用到 Composer 去資料庫取資料並將此整合成 JSON 回傳,所以藉此機會寫這篇文章分享出來,
防止日後還有人跑來找我問相關的問題。
該篇範例主要介紹 digiRunner-database-connector 節點 的基本應用,
除此之外也會用到之前介紹的節點,如果想深入了解這幾個節點的朋友,也可以參考以下幾篇:
一、前置準備
首先這家沒什麼病人的醫院有以下資料:
病人資訊
藥品資訊
病歷資訊
然後在 dgR AC >> 系統設定 >> RDB 連線 設定要連線的資料庫 (不懂這邊操作的朋友們記得回去看看這篇 digiRunner-database-connector 節點)
二、流程與設定
我們會需要這個 API 會是取得病歷為主,並將病歷中病患與使用藥品的詳細資訊整合在病歷裡面後回傳。
以下是流程的部分:
1. 檢查格式
功能:檢查 API 請求的參數格式是否正確。
來源:流程的起點是不同的搜尋條件 (生日、電話、姓名),最後通過 /medical/getdetail API 輸入。
目的:確認請求中是否有必要的參數,並檢查參數的格式。如果有錯誤,會被 catch:1 捕捉 (見第 7 步)。
2, 3, 4. Arrange parameters (整理參數)
功能:根據請求類型整理參數,然後傳遞給對應的 SQL 查詢節點。
流程:
步驟 2:如下圖所示,將參數整理後傳遞給 [SQL] get patients 節點,取得病患資訊 (Patient Information)。
步驟 3:如下圖所示,將參數整理後傳遞給 [SQL] get medical records 節點,取得病歷資訊 (Medical Records)。
步驟 4:如下圖所示,將參數整理後傳遞給 [SQL] get medications 節點,取得用藥資訊 (Medications Information)。
如果有錯誤,則會被 catch:7 捕捉 (見第 6 步)。
5. 設定回傳 JSON 格式
功能:將 SQL 查詢得到的資料組合成一個 JSON 格式的回應。
來源:接收來自 2、3、4 步驟的 SQL 結果。
目的:將所有病患資訊、病歷資訊和用藥資訊整合到一個 JSON 物件中,準備作為 API 的回應,如下圖所示:
6. 捕捉意外錯誤
功能:catch 節點捕捉紅框 2、3、4、5 中所有節點產生的未預期錯誤 (如資料庫連線失敗或未知例外),如下圖所示:
流程:捕捉錯誤後,會進入 unexpected error response 函數節點,設定錯誤訊息。
最後將錯誤訊息傳遞給 api res 節點,將其作為 API 回應返回。
7. 捕捉格式錯誤
功能:catch 節點捕捉請求參數格式錯誤 (第 1 步檢查時出錯),如下圖所示:
流程:捕捉到錯誤後,會進入 format error response 函數節點,設定錯誤訊息。
最後將錯誤訊息傳遞給 api res 節點,將其作為 API 回應返回。
二、DEMO
以上資料與設定通通齊全後,我們就來打看看這支 API:
1. 使用人名取得病歷:
結果:
2. 使用電話取得病歷,這次傳入兩個號碼試試:
結果發現確實能給出兩張病歷:
3. 使用生日取得病歷,這次加了個不存在的生日看看會怎樣:
結果可以看到不存在的生日被忽略了,只回傳兩個病歷:
三、結語
這篇的基本應用就介紹到這邊,雖然是基本應用,但足以應付大部分需求。
不過其實還是有許多可以改善的地方,一些防呆的部分、效能提升像是使用 INNER JOIN
來一次取得所需的資料以減少網路流量,但 Composer 本身就是面向 low coding 的微服務,
所以這篇就使用基本的 JS 和 SQL 語法去解決問題。
四、參考
(1) node-red 官方
(2) 自己