教學課程:轉換及保護 API
適用於:所有 APIM 層
在本教學課程中,您將了解如何設定轉換 API 的通用原則。 您可能想轉換 API,不顯示私人後端資訊。 轉換 API 有助隱藏後端執行的技術堆疊資訊,或隱藏 API HTTP 回應主體中顯示的原始 URL。
本教學課程也說明如何設定速率限制原則,來保護您的後端 API,讓開發人員不會過度使用 API。 如需更多原則選項,請參閱 API 管理原則。
注意
根據預設,API 管理會設定全域 forward-request
原則。 閘道需要 forward-request
原則,才能完成後端服務的要求。
在本教學課程中,您會了解如何:
- 轉換 API 以刪除回應標頭
- 使用 API 管理閘道 URL 取代 API 回應主體中的原始 URL
- 新增速率限制原則 (節流) 來保護 API
- 測試轉換
必要條件
- 了解 Azure API 管理術語。
- 了解 Azure API 管理的原則概念。
- 完成下列快速入門:建立 Azure API 管理執行個體。
- 同時也請完成下列教學課程:匯入和發佈您的第一個 API。
移至您的 API 管理執行個體
在 Azure 入口網站中,搜尋並選取 [API 管理服務]。
在 [API 管理服務] 頁面中,選取您的 API 管理執行個體。
轉換 API 以刪除回應標頭
本節示範如何隱藏您不想向使用者顯示的 HTTP 標頭。 例如在 HTTP 回應中刪除下列標頭:
- X-Powered-By
- X-AspNet-Version
測試原始回應
查看原始回應:
- 在您的 API 管理服務執行個體中,選取 [API]。
- 選取 API 清單中的 [Demo Conference API]。
- 選取畫面頂端的 [測試] 索引標籤。
- 選取 GetSpeakers 作業,並選取 [傳送]。
原始 API 回應看起來應如下列回應所示:
如您所見,回應會包含 X-AspNet-Version 和 X-Powered-By 標頭。
設定轉換原則
此範例示範如何使用表單型原則編輯器,協助您設定許多原則,而不必直接編輯原則 XML 陳述式。
選取 [Demo Conference API] > [設計] > [所有作業]。
在 [輸出處理] 區段中,選取 [+ 新增原則]。
在 [新增輸出原則] 視窗中,選取 [設定標頭]。
若要進行標頭原則設定,請執行下列動作:
- 在 [名稱] 底下,輸入 X-Powered-By。
- 保留值空白。 如果值出現在下拉式清單中,請將其刪除。
- 在 [動作] 底下,選取 [刪除]。
- 選取 [儲存]。
重複上述兩個步驟,新增 Set 標頭 原則,以刪除 X-AspNet-Version 標頭:
設定之後,兩個 set-header 原則元素會在 [輸出處理] 區段中顯示。
使用 API 管理閘道 URL 取代 API 回應主體中的原始 URL
本節示範如何以 API 管理閘道 URL,取代 API HTTP 回應主體中顯示的原始 URL。 您可能想隱藏使用者的原始後端 URL。
測試原始回應
查看原始回應:
選取 [Demo Conference API] > [測試]。
選取 GetSpeakers 作業,並選取 [傳送]。
如您所見,回應會包含原始後端 URL:
設定轉換原則
在此範例中,您會使用原則程式碼編輯器,直接新增原則 XML 程式碼片段至原則定義。
選取 [Demo Conference API] > [設計] > [所有作業]。
在 [輸出處理] 區段中,選取程式碼編輯器 (</>) 圖示。
將游標移至空白行上的
<outbound>
元素內。 接著選取畫面右上角的 [顯示程式碼片段]。在右側視窗的 [轉換原則] 底下,選取 [遮罩內容中的 URL]。
在資料指標新增
<redirect-content-urls />
元素。選取 [儲存]。
新增速率限制原則 (節流) 來保護 API
本節示範如何設定速率限制,並新增後端 API 的保護,讓開發人員不過度使用 API。 在此範例中,各訂用帳戶識別碼的限制設定為每 15 秒呼叫三次。 15 秒後,開發人員即可重試呼叫 API。
選取 [Demo Conference API] > [設計] > [所有作業]。
在 [輸入處理] 區段中,選取程式碼編輯器 (</>) 圖示。
將游標移至空白行上的
<inbound>
元素內。 接著,選取畫面右上角的 [顯示程式碼片段]。在右側視窗的 [存取限制原則] 下方,選取 [+ 限制每個金鑰的呼叫速率]。
在資料指標新增
<rate-limit-by-key />
元素。將
<inbound>
元素中的<rate-limit-by-key />
程式碼修改為下列程式碼。 然後選取儲存。<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
測試轉換
此時若在程式碼編輯器中查看程式碼,您的原則將如下列程式碼所示:
<policies>
<inbound>
<rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<set-header name="X-Powered-By" exists-action="delete" />
<set-header name="X-AspNet-Version" exists-action="delete" />
<redirect-content-urls />
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
本節的其餘部分將測試您在此文章中設定的原則轉換。
測試已刪除的回應標頭
選取 [Demo Conference API] > [測試]。
選取 GetSpeakers 作業,然後選取 [傳送]。
如您所見,回應會移除 X-AspNet-Version 和 X-Powered-By 標頭:
測試已取代的 URL
選取 [Demo Conference API] > [測試]。
選取 GetSpeakers 作業,然後選取 [傳送]。
此時,您可看到已取代該 URL。
測試速率限制 (節流)
選取 [Demo Conference API] > [測試]。
選取 GetSpeakers 作業。 在一個資料列中選取 [傳送] 四次。
傳送要求四次之後,您會收到 429 太多要求的回應。
至少等候 15 秒,接著再次選取 [傳送]。 此時,您應該得到 200 確定的回應。
摘要
在本教學課程中,您已了解如何:
- 轉換 API 以刪除回應標頭
- 使用 API 管理閘道 URL 取代 API 回應主體中的原始 URL
- 新增速率限制原則 (節流) 來保護 API
- 測試轉換
下一步
前進到下一個教學課程: