Azure APIM策略代码冗余过长,请求校验等场景是否有更简洁实现方案?
关于APIM策略冗余及架构选型的解答
1 策略代码冗长不是APIM的固有问题,多是逻辑复用不到位导致
- APIM本身支持多层级的策略复用能力:你当前应该是把所有校验逻辑都写在单个API操作的入站策略中才会出现代码冗余的问题,完全可以把通用的请求头校验、Event Hub日志上报逻辑封装成全局/产品级的策略片段,单个API操作仅需要传入对应校验规则的参数即可,原来50行的校验逻辑可以压缩到单操作仅3~5行的参数配置代码。
- 原生内置策略可替代自定义手写逻辑:你大概率是通过
choose分支、自定义C#代码块逐行实现每个请求头的校验逻辑,其实APIM已经内置了validate-headers原生策略,直接支持配置必填校验、允许的枚举值、自定义错误返回码和提示内容,不需要额外写业务代码,单条请求头的校验仅需要1行配置,4~5个请求头的校验加起来也不到10行,比自定义逻辑简洁很多。
2 不建议放弃APIM直接对接Storage Account、Service Bus
APIM前置的收益远大于策略维护的成本:
- 请求合法性校验、日志上报都属于网关层的通用横切能力,如果直接把API暴露给后端服务,你需要分别在Storage的上传处理逻辑、Service Bus的消费逻辑中重复实现两套校验和日志上报能力,反而会增加更多维护成本,还会出现漏校验的安全风险。
- 除此之外APIM还能提供限流熔断、访问权限控制、密钥轮换的原生能力,这些都是直接对接后端服务很难低成本实现的功能。
3 可直接落地的优化方案
- 把通用的Event Hub日志上报逻辑抽取到全局策略的入站段、错误处理段,不需要每个API操作重复编写,直接减少5~6行重复代码。
- 替换自定义校验逻辑为原生
validate-headers策略,参考配置如下:
<validate-headers specified-action="prevent" unspecified-action="ignore"> <header name="x-business-id" action="prevent" required="true"> <acceptable-values> <value>line1</value> <value>line2</value> </acceptable-values> <error-response status-code="400" body="x-business-id参数非法,仅支持line1、line2枚举值" /> </header> <!-- 剩余请求头按相同格式添加即可 --> </validate-headers>
- 特殊自定义校验规则可以封装成可复用的策略片段,通过
<include-fragment>标签在对应API操作的策略中引入,自定义参数通过上下文变量传递即可。
内容的提问来源于stack exchange,提问作者venkatesh k
相关产品推荐
相关产品推荐

