如何在 Apigee X 中缓存部分响应或特定元素?

发布: (2025年12月17日 GMT+8 11:30)
7 min read
原文: Dev.to

Source: Dev.to

抱歉,我无法直接访问外部链接的内容。如果您能提供需要翻译的具体文本,我很乐意帮您将其翻译成简体中文,并保持原有的格式、Markdown 语法以及技术术语不变。

介绍

想象一下,你正在为一个电子商务应用构建 API。每当用户打开商品页面时,后端会重新计算 商品详情定价针对用户的优惠

  • 商品详情 很少变化。
  • 优惠 变化频繁。

如果只缓存 整个 响应,而实际上只有其中的一部分是可复用的,这不是很浪费吗?

这正是 Apigee X 中的部分响应缓存 显得极其强大的地方。

在现代 API 管理 中,性能和可扩展性至关重要。Apigee X 让你不仅可以缓存完整的 API 响应,还可以缓存 响应的特定元素或片段。这样可以降低后端负载,提升延迟表现,并且让你对哪些内容应该缓存、哪些不应该缓存拥有细粒度的控制。

在本指南中,你将学习:

  • 什么是 Apigee X 中的部分响应缓存
  • 何时以及为何使用它
  • 面向初学者的逐步实现方法
  • 最佳实践以及常见错误的避免方法

核心概念

什么是 Apigee X 中的响应缓存?

在 Apigee X 中,API 代理位于客户端和后端服务之间。这些代理的一个强大功能是响应缓存,它会临时存储 API 响应,以便对重复请求能够更快地返回。

默认情况下,缓存常被视为*“缓存所有内容”。*然而,实际的 API 往往并非如此简单。

什么是部分响应缓存?

部分响应缓存指的是仅缓存响应的特定部分,而不是完整的负载。

类比: 想象一家餐厅的菜单。

  • 菜单项很少变化 → 缓存它们。
  • 每日特价经常变化 → 不缓存它们。

与其每次都存储整份菜单,你只缓存静态部分,然后动态组装最终的响应。

为什么缓存部分响应?

使用场景和好处

  • 减少对静态数据的后端调用
  • 提升 API 响应时间
  • 避免提供过时的动态数据
  • 优化缓存大小和效率
  • 更好地控制 API 流量管理

Apigee X 中的典型场景:

  • 用户资料 API
  • 产品目录
  • 配置或参考数据
  • 静态 + 动态混合响应

步骤指南:Apigee X 中的部分响应缓存

场景

后端响应

{
  "userId": "123",
  "name": "Ravi",
  "accountType": "PREMIUM",
  "balance": 8450.75,
  "lastLogin": "2025-12-15T10:30:00Z"
}
字段更改频率缓存?
accountType很少
balance频繁
lastLogin频繁

第 1 步 – 提取可缓存元素

使用 ExtractVariables 策略提取静态部分。

<ExtractVariables name="ExtractAccountType">
    <JSONPayload>
        <Variable name="accountType">$.accountType</Variable>
    </JSONPayload>
</ExtractVariables>

📌 这会把 accountType 提取到流变量(accountType)中。

第 2 步 – 缓存部分值

使用 ResponseCache 策略仅缓存提取的元素。

<ResponseCache name="CacheAccountType">
    <CacheKey>
        <KeyFragment ref="accountType"/>
    </CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <TimeoutInSec>3600</TimeoutInSec>
    </ExpirySettings>
    <CacheResource>accountType</CacheResource>
</ResponseCache>

📌 只缓存 accountType 的值,而不是完整响应。

第 3 步 – 使用缓存数据填充响应

在返回响应之前,使用 AssignMessage 注入缓存值。

<AssignMessage name="BuildHybridResponse">
    <Payload contentType="application/json">
        {
          "userId": "{request.header.user-id}",
          "accountType": "{accountType}",
          "balance": "{response.balance}",
          "lastLogin": "{response.lastLogin}"
        }
    </Payload>
    <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

📌 这会创建一个 混合响应:部分来自缓存,部分为动态生成。

流程图(概念)

Client
   |
   v
Apigee X API Proxy
   |
   |-- 检查 accountType 缓存
   |
   |-- 调用后端获取动态数据
   |
   |-- 合并缓存值和动态值
   |
   v
Final Response to Client

最佳实践

  • 仅缓存真正静态的数据 – 避免用户特定或频繁变化的字段。
  • 设计有意义的缓存键 – 使用用户 ID、地区或产品 ID 等标识符。
  • 设置合适的 TTL 值 – 对半静态数据使用短 TTL,对参考数据使用更长 TTL。
  • 绝不缓存敏感信息 – 不缓存个人身份信息(PII)、令牌或机密数据。
  • 监控缓存性能 – 使用 Apigee 分析来跟踪命中/未命中比例。

常见错误避免

❌ 错误为什么是问题
在仅有部分可复用时缓存完整响应浪费缓存空间并可能提供过期数据
为不同用户使用相同的缓存键导致用户之间的数据泄漏
忽视缓存失效策略过期数据会比预期存留更久
未在负载下测试缓存行为出现意外的性能瓶颈

结论

Apigee X 中进行部分响应缓存可以让您对性能优化进行细粒度控制。通过仅缓存 有意义的内容,您可以实现更快的 API 响应、降低后端负载,并提升消费者的满意度。

结合 ExtractVariablesResponseCacheAssignMessage 策略,您可以:

  1. 提取静态片段。
  2. 高效地存储它们。
  3. 在每次请求时重新组装出混合响应。

祝缓存愉快! 🚀

在速度与新鲜度之间取得平衡的智能 API 代理

设计能够在速度与新鲜度之间取得平衡的智能 API 代理。这种方法在数据以不同速率变化的真实企业 API 中尤为有价值。

既然您已经了解了概念,请尝试在您的某个 API 中实现部分响应缓存,并亲自观察性能提升的效果。

Back to Blog

相关文章

阅读更多 »