digiRunner Composer node-red

Composer http request 節點的基本介紹

顏綸 Lun Yan 2023/12/18 23:02:40
1158

前言

如果還不知道什麼是 Composer 的朋友們,可以先參考這篇 DigiRunnerAPI組合與設計 。

該篇範例會用到 debug 節點與 inject 節點,如果想深入了解這兩個節點的朋友,也可以參考以下這兩篇:

Composer debug 節點的完整介紹

Composer inject 節點的完整介紹

 

http request 節點是 Composer 中最重要的節點之一,它是用來對 API 進行 HTTP 請求的節點,

當我們透過 APIM 的 Composer 管理 API 時,就會需要使用到此節點。

而這篇將分享 http request 節點的相關設定與幾個使用 http request 節點的簡單例子。

 

 

一、基本介紹

http request 節點是屬於 Node-RED 的 network 節點,並使用該節點發送 GET、POST 等類型的 HTTP 請求。

以下是節點設定介面的介紹 (一):

(1) 選擇對 API 進行哪個方法的請求,如下圖所示:

預設為 GET,之後有 POST、PUT、DELETE、HEAD 來供使用者選擇

如要打的 API 需要其他方法來打,像是 PATCH 方法,則使用參數傳入的方式來指定方法並選擇 "用 msg.method 設定" 選項。

 

(2) 完整的 API 路徑。

 

(3) 對內容 (msg.payload) 進行的處理有以下選項,如圖所示:

ignore:不處理 msg.payload

這通常用於 GET 請求,因為 GET 請求的參數通常是透過 URL 的查詢字串傳遞的,而不是在請求主體中。

 

Append to query-string parameters:將 msg.payload 附加到查詢字串參數中。

這在需要將 msg.payload 作為 GET 請求的查詢字串的一部分時非常有用。

 

Send as request body:將 msg.payload 放入請求的主體中,通常用於 POST 請求或其他需要在請求主體中包含資料的請求類型。

這是用於將資料以 JSON、表單等形式傳遞的情況。

 

註:只有選到 GET 方法,才會在介面出現此設定選項

 

(4) 建立一個含 ca、私鑰、證書等的 TLS 節點來進行安全連接 (SSL/TLS),如下圖所示

該圖為 TLS 節點的設定介面

 

(5) 使用基本認證、摘要認證或 Bearer 來通過伺服器的驗證

該功能在做請求時,其實就是在 headers 增加 Authorization 的屬性。

 

(6) 對連接啟用 keep-alive,可以增加請求回應速度,但也會增加記憶體使用量。

目前默認是起用且不給停用。

 

以下是節點設定介面的介紹 (二):

(7) 為該請求添加代理並透過該代理進行請求,如下圖所示:

該圖為代理的設定介面。

 

(8) 只有當 HTTP 回應的狀態碼不在 2xx 範圍(200 到 299)時,才將該回應送到 catch 節點進行處理。

這對於捕捉和處理錯誤狀態非常有用。如果你只對非成功的回應進行處理,可以勾選這個選項,而成功的回應則將 msg 送到下一個節點。

(關於 catch 節點會在以後作介紹)

 

(9) 選中這個選項表示禁用嚴格的 HTTP 解析。當啟用時,HTTP Request 節點將更嚴格地解析 HTTP 回應,

以確保符合標準。禁用這個選項後,解析可能更寬鬆,允許一些不符合標準的回應。

這在處理某些特殊情況下的回應時可能會有用,但一般情況下建議保持啟用,以確保正確解析符合標準的回應。

 

(10) API 回應的資料可以依以下選項轉成對應格式:

並將結果放至 msg.payload。

 

(11) 添加請求的 header 屬性,如下圖範例所示:

按下左下方的添加按鈕即可新增一個 header 屬性。

 

 

二、節點效果、特性與傳入參數

(1) 節點 pending 會如下圖所示:

請求時,流程會停在這個節點,當有回應或超時才會繼續往下走,

請求成功則不會有任何節點狀態。

 

(2) 節點錯誤時:

會將錯誤資訊顯示在節點下方。

 

(3) http request 節點請求自簽憑證時,默認無法請求,需要如下圖才能請求成功:

inject 節點內為:

傳入 msg.rejectUnauthorized = true 即可請求自簽憑證的 URL

 

(4) http request 節點請求超時默認為:

Composer:60 秒

node-red:120 秒 

傳入 msg.requestTimeout 則可設定超時時間,單位為毫秒。

 

(5) 傳入的 msg.payload 可視為 request body,

如果 request body 為 form-data,則不用去 new formData 出來,直接傳入 object 即可。

 

(6) URL 可從 msg.url 傳入,但是如果已在 http request 節點設定 URL,

則以介面上設定的 URL 為主。

 

(7) 請求方法可從 msg.method 傳入,但是如果沒在 http request 節點請求方法選項設定 "用 msg.method 設定" 的選項,

且 msg.method 傳入的與節點請求的方法設定不一致,則以介面上設定的請求方法為主,正常運作的同時並跳出警告訊息。

 

(8) msg.headers 可設置請求標頭。

 

(9) msg.followRedirects = false,則阻止遵循重定向(HTTP 301)。默認情況下爲 true,

並最多可 redirects 21次。

 

 

三、簡單範例

以下例子我們選擇了台電所提供發電狀況表的 CSV 載點,並對回應出來的參數進行處理:

我們在 http request 節點設好了 URL,並使用了 GET 方法。

由於此 API 不需要任何參數,所以內容可不選。

返回資料的部分選擇 "二進位資料" 

出來的資料即為 array buffer 且編碼默認為 utf8,如下圖所示:

再來這 CSV 編碼為 big5,我們需要接上 converter 節點然後 encoding big5:

encoding 完會長以下樣子:

最後再將該 msg.payload 轉換成 csv 格式,其設定介面:

出來的資料:

 

 

四、結語

關於 http request 節點設定介面與簡單應用的方法就介紹到這邊,

寫一寫才發現裡面功能實在是有夠多,幾乎快滿足所有的請求需求了,

但由於怕篇幅拉太長,所以還是有很多應用方式沒介紹到,這之後有機會再開一篇講 http request 節點進階應用的部分。

 

 

五、參考文獻

(1) node-red 官方

(2) 自己

 

顏綸 Lun Yan