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"} |
#
驗證請參考設定範例的內容來進行驗證。