Version: Next
Response Transformer
用途說明#
此插件可以在回應返回給客戶端之前,即時轉換上游服務器發送的回應。
轉換body注意事項
要注意回應的body轉換的性能。
為了解析和修改JSON格式的body,插件會把body保留在內存中,在處理龐大的body(多個MBs)時,可能會造成執行程序的負擔。由於Nginx的內部結構,在轉換回應body時,將不會設置Content-Length的標頭。
欄位配置說明#
啟用時可以看到以下畫面:

對應的配置說明如下:
| 參數 | 類型 | 預設值 | 說明 | 必填 |
|---|---|---|---|---|
| remove.headers | array of string | 標頭名稱列表。 會將對應到的標頭名稱移除。 | ||
| remove.json | array of string | 屬性名稱列表。 若該屬性名稱在JSON body內存在,會將對應之屬性名稱移除。 | ||
| rename.headers | array of string | 原本標頭名稱:新標頭名稱的列表。格式需照「原本標頭名稱:新標頭名稱」的方式來設定。 若「原標頭名稱」已經存在,才會將該標頭名稱改名為「新標頭名稱」;若「原標頭名稱」不存在,則會忽略。 | ||
| replace.headers | array of string | 標頭名稱:值的列表。格式需照「標頭名稱:值」的方式來設定。 若標頭名稱已經存在,才會使用該標頭名稱所對應的值來取代;若該標頭名稱不存在,則會忽略。 | ||
| replace.json | array of string | 屬性名稱:值的列表。格式需照「屬性名稱:值」的方式來設定。 如果該屬性名稱已經存在,才會使用該屬性名稱所對應的值來取代;若該屬性名稱不存在,則會忽略。 | ||
| replace.json_types | array of string | JSON類型名稱列表。 指定替換JSON屬性名稱時所返回的JSON值的類型。每個字串的類型可以是以下其中之一: boolean、number、string。 | ||
| add.headers | array of string | 標頭名稱:值的列表。格式需照「標頭名稱:值」的方式來設定。 只有當標頭名稱不存在的時候,才會使用設定值來設置一個新的標頭名稱;若該標頭名稱已存在,則會忽略。 | ||
| add.json | array of string | 屬性名稱:值的列表。格式需照「屬性名稱:值」的方式來設定。 只有當屬性名稱不存在於JSON body的時候,才會使用設定值來設置一個新的屬性名稱;若該屬性名稱已存在,則會忽略。 | ||
| add.json_types | array of string | JSON類型名稱列表。 指定新增JSON屬性名稱時所返回的JSON值的類型。每個字串的類型可以是以下其中之一: boolean、number、string。 | ||
| append.headers | array of string | 標頭名稱:值的列表。格式需照「標頭名稱:值」的方式來設定。 當標頭名稱不存在的時候,會使用設定值來設置一個新的標頭名稱。若該標頭名稱已存在,則會使用設定值來設置在相同的標頭名稱上。 | ||
| append.json | array of string | 屬性名稱:值的列表。格式需照「屬性名稱:值」的方式來設定。 只有當屬性名稱不存在於JSON body的時候,會使用設定值來設置一個新的屬性名稱。若該屬性名稱已存在,則會把兩個值(原本對應的值 和 新的設定值)匯總到一個陣列(array)內。 | ||
| append.json_types | array of string | JSON類型名稱列表。 指定附加JSON屬性名稱時所返回的JSON值的類型。每個字串的類型可以是以下其中之一: boolean、number、string。 |
注意事項
- 如果設定值含有
,,則不能使用逗號分隔的列表格式,必須使用陣列的符號代替。
實際執行配置的順序#
插件會按照以下順序之配置來執行請求的轉換:
remove → rename → replace → add → append
用法示例#
在全局啟用插件#
- 從網站左邊Menu中
外掛插件頁面中,點選右上角的新增外掛插件:

- 點選後,選擇
轉換頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,任何請求(不分服務、路由、用戶)的回應轉換都會生效。
在服務端上啟用插件#
- 從網站左邊Menu中
服務 > 服務列表頁面中,選擇要啟用此插件的服務,假設為google,點選對應的編輯按鈕:

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

點選後,選擇 轉換 頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,僅有此服務(範例為google)請求的回應轉換會生效。
在路由端上啟用插件#
可以由兩種方式來選擇路由,並啟用插件:
方式一:路由列表#
- 從網站左邊Menu中
服務 > 路由列表頁面中,選擇要啟用此插件的路由,假設為google,點選對應的編輯按鈕:

方式二:服務 > 服務列表 > 路由列表#
- 從網站左邊Menu中
服務 > 服務列表頁面中,選擇要啟用此插件的路由 所屬之服務(假設為google),點選對應的編輯按鈕。
在編輯畫面中,點選上方的 路由 頁籤,選擇要啟用此插件的路由(假設為google),點選對應的編輯按鈕:

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

點選新增外掛插件 按鈕後,選擇 轉換 頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,僅有此路由(範例為google)請求的回應轉換會生效。
在用戶端上啟用插件#
- 從網站左邊Menu中
訂閱用戶 > 用戶列表頁面中,選擇要啟用此插件的用戶,假設為portaladmin,點選對應的編輯按鈕:

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

點選後,選擇 轉換 頁籤,並啟用Response Transformer,填寫內容參考欄位配置說明,設定成功後,僅有此用戶(範例為portaladmin)請求的回應轉換會生效。
設定範例#
add headers設定#
假設 add headers設定2組,為: h1:v1、h2:v1,則結果如下:
| 上游回應標頭 | 代理回應標頭 |
|---|---|
| h1:v1 | h1:v1 h2:v1 |
add json設定#
假設 add json設定2組,為: p1:v1、p2:v2,則結果如下:
| 上游回應JSON body | 代理回應body |
|---|---|
| {} | {"p1":"v1","p2":"v2"} |
| {"p1":"v2"} | {"p1":"v2","p2":"v2"} |
append headers設定#
假設 append headers設定2組,為: h1:v2、h2:v1,則結果如下:
| 上游回應標頭 | 代理回應標頭 |
|---|---|
| h1:v1 | h1:v1 h1:v2 h2:v1 |
remove json設定#
假設remove json設定為:p1,則結果如下:
| 上游回應JSON body | 代理回應body |
|---|---|
| {"p2":"v2"} | {"p2":"v2"} |
| {"p1":"v1","p2":"v1"} | {"p2":"v2"} |
驗證#
請參考設定範例的內容來進行驗證。