🔥
[Azure] API managementにおけるポリシー編集を試してみた
概要
API Management(以下、APIM)は、APIのゲートウェイであり公開・利用制限・保護・分析などの管理ツールである。
ポリシーを使った細かい制御が実現可能なため、一例をあげて試してみる。
試してみたこと
APIMがPostでの受付のみしているところに、GETリクエストを実施する。
デフォルトでは、メソッド誤りは404が返却されるが、レスポンスを上書きすることで405を返すようにしてみる。
環境構成
APIMと、バックエンドにAzure Functionsを準備する。
正常にリクエストを送信すれば200が返ってくる。
ポリシー
以下を設定した。Operationではなく、より上位のAPIやAll Productsで設定する必要がある。少なくともOperationレベルで設定したときにはポリシーが効かなかった。
<on-error>
<base />
<choose>
<when condition="@(context.LastError.Source == "configuration" && context.LastError.Reason == "OperationNotFound")">
<return-response>
<set-status code="405" reason="method not allowed" />
</return-response>
</when>
</choose>
</on-error>
参考
ポリシーの解説
- 条件分岐をchoose-when文で実現する。
- conditionの条件文は、組み込みの手順向けの定義済みエラーを参照した。
- 今回は検証のため、statusの上書きのみを実施したが、ヘッダーやボディの上書きを行う場合には、set-headerやset-bodyを参照する。
- on-errorブロックについては、リクエストの処理中にエラーが発生したときに行う処理を定義した箇所である。168ページ目
ポリシーの設定場所の注意点
今回の要件は、API Managementが返すステータスの上書きになる。
Inbound processingに設定すると、バックエンドからの返却ステータスの上書きになる。そのため、バックエンドに到達することが前提のポリシー設定になる。
Inboundに設定した時のポリシー
<policies>
<inbound>
<base />
<choose>
<when condition="@(context.Request.Method != "POST")">
<return-response>
<set-status code="405" reason="Method Not Allowed" />
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
リクエストをしてみての確認
ステータスが上書きされた状態で返ってきた。問題なくポリシーが定義しているようである。
Discussion