Skip to main content
Version: Next

Response Transformer

Response Transformer

用途說明#

此插件可以在回應返回給客戶端之前,即時轉換上游服務器發送的回應。

轉換body注意事項

要注意回應的body轉換的性能。

為了解析和修改JSON格式的body,插件會把body保留在內存中,在處理龐大的body(多個MBs)時,可能會造成執行程序的負擔。由於Nginx的內部結構,在轉換回應body時,將不會設置Content-Length的標頭。

欄位配置說明#

啟用時可以看到以下畫面:

插件啟用配置圖

對應的配置說明如下:

參數類型預設值說明必填
remove.headersarray of string標頭名稱列表。
會將對應到的標頭名稱移除。
remove.jsonarray of string屬性名稱列表。
若該屬性名稱在JSON body內存在,會將對應之屬性名稱移除。
rename.headersarray of string原本標頭名稱:新標頭名稱的列表。格式需照「原本標頭名稱:新標頭名稱」的方式來設定。
若「原標頭名稱」已經存在,才會將該標頭名稱改名為「新標頭名稱」;若「原標頭名稱」不存在,則會忽略。
replace.headersarray of string標頭名稱:值的列表。格式需照「標頭名稱:值」的方式來設定。
若標頭名稱已經存在,才會使用該標頭名稱所對應的值來取代;若該標頭名稱不存在,則會忽略。
replace.jsonarray of string屬性名稱:值的列表。格式需照「屬性名稱:值」的方式來設定。
如果該屬性名稱已經存在,才會使用該屬性名稱所對應的值來取代;若該屬性名稱不存在,則會忽略。
replace.json_typesarray of stringJSON類型名稱列表。
指定替換JSON屬性名稱時所返回的JSON值的類型。每個字串的類型可以是以下其中之一:booleannumberstring
add.headersarray of string標頭名稱:值的列表。格式需照「標頭名稱:值」的方式來設定。
只有當標頭名稱不存在的時候,才會使用設定值來設置一個新的標頭名稱;若該標頭名稱已存在,則會忽略。
add.jsonarray of string屬性名稱:值的列表。格式需照「屬性名稱:值」的方式來設定。
只有當屬性名稱不存在於JSON body的時候,才會使用設定值來設置一個新的屬性名稱;若該屬性名稱已存在,則會忽略。
add.json_typesarray of stringJSON類型名稱列表。
指定新增JSON屬性名稱時所返回的JSON值的類型。每個字串的類型可以是以下其中之一:booleannumberstring
append.headersarray of string標頭名稱:值的列表。格式需照「標頭名稱:值」的方式來設定。
當標頭名稱不存在的時候,會使用設定值來設置一個新的標頭名稱。若該標頭名稱已存在,則會使用設定值來設置在相同的標頭名稱上。
append.jsonarray of string屬性名稱:值的列表。格式需照「屬性名稱:值」的方式來設定。
只有當屬性名稱不存在於JSON body的時候,會使用設定值來設置一個新的屬性名稱。若該屬性名稱已存在,則會把兩個值(原本對應的值 和 新的設定值)匯總到一個陣列(array)內。
append.json_typesarray of stringJSON類型名稱列表。
指定附加JSON屬性名稱時所返回的JSON值的類型。每個字串的類型可以是以下其中之一:booleannumberstring
注意事項
  • 如果設定值含有,,則不能使用逗號分隔的列表格式,必須使用陣列的符號代替。

實際執行配置的順序#

插件會按照以下順序之配置來執行請求的轉換:

remove → rename → replace → add → append

用法示例#

在全局啟用插件#

  1. 從網站左邊Menu中 外掛插件 頁面中,點選右上角的 新增外掛插件

全局啟用畫面

  1. 點選後,選擇 轉換 頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,任何請求(不分服務、路由、用戶)的回應轉換都會生效。

在服務端上啟用插件#

  1. 從網站左邊Menu中 服務 > 服務列表 頁面中,選擇要啟用此插件的服務,假設為google,點選對應的編輯按鈕:

服務啟用畫面1

  1. 在編輯畫面中,點選上方的 外掛插件 頁籤,再點選頁籤內容上方的 新增外掛插件 按鈕:

服務啟用畫面2

點選後,選擇 轉換 頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,僅有此服務(範例為google)請求的回應轉換會生效。

在路由端上啟用插件#

可以由兩種方式來選擇路由,並啟用插件:

方式一:路由列表#

  1. 從網站左邊Menu中 服務 > 路由列表 頁面中,選擇要啟用此插件的路由,假設為google,點選對應的編輯按鈕:

路由啟用畫面1

方式二:服務 > 服務列表 > 路由列表#

  1. 從網站左邊Menu中 服務 > 服務列表 頁面中,選擇要啟用此插件的路由 所屬之服務(假設為google),點選對應的編輯按鈕。

在編輯畫面中,點選上方的 路由 頁籤,選擇要啟用此插件的路由(假設為google),點選對應的編輯按鈕:

路由啟用畫面2


  1. 承第1步,點擊上述兩種方式之一的編輯按鈕後,在編輯畫面中,點選上方的 外掛插件 頁籤,再點選頁籤內容上方的 新增外掛插件 按鈕:

路由啟用畫面3

點選新增外掛插件 按鈕後,選擇 轉換 頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,僅有此路由(範例為google)請求的回應轉換會生效。

在用戶端上啟用插件#

  1. 從網站左邊Menu中 訂閱用戶 > 用戶列表 頁面中,選擇要啟用此插件的用戶,假設為portaladmin,點選對應的編輯按鈕:

用戶啟用畫面1

  1. 在編輯畫面中,點選上方的 外掛插件 頁籤,再點選頁籤內容上方的 新增外掛插件 按鈕:

用戶啟用畫面2

點選後,選擇 轉換 頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,僅有此用戶(範例為portaladmin)請求的回應轉換會生效。

設定範例#

add headers設定#

假設 add headers設定2組,為: h1:v1h2:v1,則結果如下:

上游回應標頭代理回應標頭
h1:v1h1:v1
h2:v1

add json設定#

假設 add json設定2組,為: p1:v1p2:v2,則結果如下:

上游回應JSON body代理回應body
{}{"p1":"v1","p2":"v2"}
{"p1":"v2"}{"p1":"v2","p2":"v2"}

append headers設定#

假設 append headers設定2組,為: h1:v2h2:v1,則結果如下:

上游回應標頭代理回應標頭
h1:v1h1:v1
h1:v2
h2:v1

remove json設定#

假設remove json設定為:p1,則結果如下:

上游回應JSON body代理回應body
{"p2":"v2"}{"p2":"v2"}
{"p1":"v1","p2":"v1"}{"p2":"v2"}

驗證#

請參考設定範例的內容來進行驗證。