You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure API Management能否基于请求负载中的指定键实现缓存?

Azure API Management 基于请求负载字段配置缓存方案

完全支持你描述的场景。你可以通过APIM的自定义策略解析JSON/XML格式的请求负载,提取指定的CustomerId字段,将其纳入缓存键的生成规则,实现按用户维度的缓存控制。

核心实现逻辑

APIM默认的缓存键仅包含请求方法、请求URL等基础信息,要加入请求体中的自定义字段,需要做如下配置:

  • 入站阶段先开启请求体缓冲,确保请求体被策略读取后仍能正常转发给后端服务
  • 通过策略表达式解析请求体,提取CustomerId字段存入自定义变量
  • 配置缓存查找规则时,将自定义变量作为缓存键的可变参数

示例策略

JSON请求负载配置

<policies>
    <inbound>
        <base />
        <!-- 保留请求体内容,避免读取后后端无法获取 -->
        <set-body template="none">@(context.Request.Body.As<string>(preserveContent: true))</set-body>
        <!-- 提取JSON中CustomerId字段,可根据你的实际JSON结构调整 -->
        <set-variable name="customerId" value="@(context.Request.Body.As<JObject>()["CustomerId"].ToString())" />
        <!-- 缓存查找规则,加入CustomerId作为缓存区分维度 -->
        <cache-lookup vary-by-developer="false" vary-by-developer-groups="false">
            <vary-by-header>Content-Type</vary-by-header>
            <vary-by-custom>@((string)context.Variables["customerId"])</vary-by-custom>
        </cache-lookup>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
        <!-- 缓存存储,时长单位为秒,可按需调整 -->
        <cache-store duration="1800" />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

XML请求负载配置

如果请求是XML格式,只需修改提取CustomerId的变量配置即可,示例如下:

<!-- 假设XML根节点为Request,CustomerId为其子节点,可根据实际结构调整 -->
<set-variable name="customerId" value="@(context.Request.Body.As<XElement>().Element("Request").Element("CustomerId").Value)" />

注意事项

  • 建议增加字段存在性判断逻辑,避免请求体中无CustomerId时策略执行报错
  • 大体积请求负载的解析操作会产生少量性能开销,高并发场景下建议提前做压测评估
  • 如果你的API同时支持JSON和XML格式,可以在策略中增加Content-Type判断,适配不同的解析逻辑

内容的提问来源于stack exchange,提问作者user1005448

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:57:04