kleijnweb/rest-e-tag-bundle

此包已被弃用,不再维护。未建议替代包。

使用 E-Tag 头部缓存和并发控制 REST API

安装: 128

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 1

类型:symfony-bundle

v1.0.0 2016-02-21 13:45 UTC

This package is not auto-updated.

Last update: 2024-01-15 08:27:54 UTC


README

Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version

这是一个小型包,它通过使用 E-Tag 头部为 REST API 添加缓存和并发控制。

访问发布页面以查找有关最新版本的详细信息。

示例请参见swagger-bundle-example

注意:需要支持 PHP <7.0 和 Symfony <2.8.7?请使用 01.x 版本。

功能细节

RestETagBundle 使用 REST 语义来形成一个缓存失效和乐观并发策略。

  • 版本化你的 URI 路径表示的资源,并在服务器端缓存中保持这个列表。
  • 当使用以下方法之一时,增加路径的版本:POST、PUT、PATCH、DELETE
  • 当子路径的版本增加时,增加所有父路径和选定的“更低”路径的版本
  • 确保使用 If-Match 传递的标签与缓存中的 ETag 匹配,不一致时返回 HTTP 412
  • 当启用并发控制且缺少适当的头时,返回 HTTP 428 响应

该包使用基于微时间的版本 ID 来防止服务器端缓存丢失导致冲突和亚秒级资源锁定。在将它们用作缓存键之前,从 URL 中删除所有不可打印和非 ASCII 字符。

版本化方案非常简单,例如

  • 修改 /animals/rabbits/1:使 /animals/animals/rabbits/animals/rabbits/1 无效,如果存在,则使 /animals/rabbits/1/relations/owners 无效

  • /animals/rabbits/2 进行 GET 操作:此操作不受上述示例的影响。此外,如果尚不存在版本,它将创建一个版本(而不会使任何内容无效)

  • 修改 /animals/rabbits/animals/animals/rabbits 都会获得一个新版本。因此,任何现有版本(如果符合子路径失效约束)也会失效,例如 /animals/rabbits/findByName

URL 的查询部分被视为最后一个路径段

  • 修改 /animals?type=rabbits:将被解释为修改 /animals/?type=rabbits。因此,/animals 将被使无效。

  • /animals?type=rabbits 进行 GET 操作:将被解释为 GET /animals/?type=rabbits

  • 修改 /animals/rabbits?id=1:将被解释为修改 /animals/rabbits/?id=1。因此,/animals/animals/rabbits 的旧版本也将被使无效。

  • /animals?type=dogs 进行 GET 操作:将被解释为 GET /animals/?type=dogs。因此,修改 /animals?type=rabbits 不会影响它(但修改 /animals 将使它无效)。

默认的子路径失效约束是一个否定正则表达式:\/[0-9]+$。这意味着对 /animals/rabbits 的 POST 默认不会使 /animals/rabbits/1 或其下任何路径无效,但会使 /animals/rabbits/findByName 无效。

注意:当启用并发控制时,如果没有正确的 E-Tag,则不能 POST。

注意:存储和检索调用尚未完全优化,在通过网络缓存的缓存中使用时,它们会变得相当健谈。您可能期望从 APCu 获得最佳性能。它不会使用太多内存。

安装和配置

使用composer安装(composer require kleijnweb/rest-e-tag-bundle)。您可以通过查看发布页面来确保您获得所需的内容,并可选地验证您的下载。

并发控制默认启用。要禁用

rest_e_tags:
  concurrency_control: false

该组件可以与任何PSR-16缓存(强烈不建议使用网络缓存)一起工作。使用'cache'配置选项来引用要使用的服务

rest_e_tags:
  cache: my.cache.service

您可以调整默认的子失效约束(取反,见上面的默认设置)

rest_e_tags:
  # Do not invalidate paths that look like they end in UUIDs (nor any paths below them)
  child_invalidation_constraint: '\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
rest_e_tags:
  # Always invalidate, skip regex match
  child_invalidation_constraint: ''

许可证

KleijnWeb\RestETagBundle是在LGPL,版本3.0的条款下提供的。