2017-01-16 130 views
0

這應該是這樣一個簡單的問題,我不明白爲什麼它沒有通過我所有的搜索(可能只是漫長的一天)。API網關 - 獲取狀態代碼

我有一個API網關API設置,我增加了Body Mapping TemplateIntegration Response爲400 *錯誤組:看圖片 -

enter image description here

所有我想獲得是對的StatusCode目前的反應(因爲這是一個400 *組 - 例如401/403/404等)

最接近的是我通過這個網站:AWS help documentation,我想我可以使用像$context.statusCode - 但沒有運氣。

我會瘋了,還是這不是經常需要的東西?

PS - 對所調用的任何Lambda函數進行更改不是一個選項。

感謝

回答

0

有專用的合併響應狀態代碼API網關目前沒有映射模板變量。

我們肯定會將此作爲功能請求添加。

目前,您僅限於在響應模板中硬編碼狀態碼值。您需要定義通用狀態代碼(即「4XX」)或爲要捕獲的每個狀態代碼定義集成響應。雖然這看起來很乏味,但在Swagger模板中可以相對容易地進行管理。

當前,查看集成響應狀態碼的唯一方法是通過CloudWatch Logs。

謝謝, 瑞安/亞馬遜API網關

+0

那麼,那不是我期待的答案......我不明白爲什麼所有的功能都可以允許正則表達式狀態碼是允許的,但是你不能捕獲它是什麼statusCode。無論如何,感謝您的反饋,讓我們希望儘早實施,而不是晚些時候。 – Hexie

0

如果你是從你的服務器發送錯誤代碼,那麼你可以很容易地將它們映射。

我做了類似的事情,但我使用了不同的技巧。我曾經從服務器發送自己的錯誤實體和代碼。

您必須將來自服務器的錯誤實體和錯誤代碼映射到來自亞馬遜服務器的響應。我會盡力解釋我的意思。 Api網關不會自動將來自您自己的服務器的響應發送到客戶端。你必須映射這些響應。例如,作爲SUCESS和響應實體的地圖200將是默認的,即來自服務器的任何內容。

現在,我們可以管理默認的成功響應,但錯誤代碼和錯誤實體又如何呢?你必須手動映射它們。

有兩種方法可以做到這一點,

一個是手動的,去你的API。創建錯誤實體或模型。爲每個響應代碼手動映射它們。

這個使用swaggger, 解決方法是導入錯誤實體的招搖規格。將響應模板添加到swagger規範中,並讓亞馬遜完成他們的工作。

我可以幫助你更多的招搖。這取決於你如何在亞馬遜上設置你的api。

參觀此亞馬遜extenstions招搖, http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions.html#api-gateway-swagger-extensions-integration-response

+0

感謝Ajinkya但正如我所說,我不想進行任何拉姆達功能和服務器調用,這是假設的狀態未知。我假設必須有一種方法,通過標題或其他來獲得相同的迴應。如果小提琴或郵遞員可以做到這一點,那麼當然這並不難,它可能只是我遺漏的一個物業 – Hexie

+0

P.S.我也想避免爲每個已知的狀態類型設置不同的響應,這對大APIs來說是荒謬的 – Hexie