kleijnweb / rest-e-tag-bundle
使用 E-Tag 头部缓存和并发控制 REST API
Requires
- php: >=5.4.0
- doctrine/cache: ^1.5.4
- psr/log: 1.0
- symfony/config: >=2.6.0
- symfony/dependency-injection: >=2.6.0
- symfony/event-dispatcher: >=2.6.0
- symfony/filesystem: >=2.6.0
- symfony/http-foundation: >=2.6.0
- symfony/http-kernel: >=2.6.0
- symfony/yaml: >=2.6.0
Requires (Dev)
- mikey179/vfsstream: ^1.5
- phpunit/phpunit: >=4.1.0
- satooshi/php-coveralls: <1.0
- symfony/browser-kit: >=2.7.0
- symfony/dom-crawler: >=2.7.0
- symfony/finder: >=2.7.0
- symfony/form: >=2.7.0
- symfony/framework-bundle: >=2.7.0
- symfony/monolog-bundle: >=2.7.0
- symfony/routing: >=2.7.0
This package is not auto-updated.
Last update: 2024-01-15 08:27:54 UTC
README
这是一个小型包,它通过使用 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的条款下提供的。