Composer http request 節點的基本介紹
前言
如果還不知道什麼是 Composer 的朋友們,可以先參考這篇 DigiRunnerAPI組合與設計 。
該篇範例會用到 debug 節點與 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) 自己