REST API - 单个资源的更新会更改多个其他资源
REST API - Update of single resource changes multiple others
我正在寻找解决以下问题的方法:
假设您修改了一个资源,随后导致其他资源的更新。
例如您向 /api/orders/1234
发出 PUT,根据定义,它会更改给定用户的所有其他订单的状态。可能有 UI 个客户端显示订单的 table,他们应该知道不仅 table 中的单个项目已更新,最终其他项目也会更新。
现在,有没有什么标准的方法可以告知客户这种情况?
到目前为止,我只能想到发回 205 Reset Content
HTTP 状态代码来通知客户端他应该刷新状态,因为不仅仅是一件事情被改变了。
有多种解决方案。
- 您可以将特定资源定义为不可缓存,这样客户端根本不会缓存它们。 (
no-store
)
- 您可以尝试将
max-age
设为 0,这样客户端将不得不始终重新验证这些资源。在这种情况下,您可能必须实施 ETag
s 和条件 GET
s,但它在服务器上比选项 1 更容易。
- 像WebSockets.
这样的push方法
如果您真的想要 "notify" 潜在的多个客户端进行更改,那么听起来您需要选项 3。
但是,正确配置的缓存通常就足够了。例如,您可以将尚未执行的订单标记为未缓存(max-age=0),但是一旦执行,您可以将其标记为无限期缓存,因为它不能再更改。
我正在寻找解决以下问题的方法:
假设您修改了一个资源,随后导致其他资源的更新。
例如您向 /api/orders/1234
发出 PUT,根据定义,它会更改给定用户的所有其他订单的状态。可能有 UI 个客户端显示订单的 table,他们应该知道不仅 table 中的单个项目已更新,最终其他项目也会更新。
现在,有没有什么标准的方法可以告知客户这种情况?
到目前为止,我只能想到发回 205 Reset Content
HTTP 状态代码来通知客户端他应该刷新状态,因为不仅仅是一件事情被改变了。
有多种解决方案。
- 您可以将特定资源定义为不可缓存,这样客户端根本不会缓存它们。 (
no-store
) - 您可以尝试将
max-age
设为 0,这样客户端将不得不始终重新验证这些资源。在这种情况下,您可能必须实施ETag
s 和条件GET
s,但它在服务器上比选项 1 更容易。 - 像WebSockets. 这样的push方法
如果您真的想要 "notify" 潜在的多个客户端进行更改,那么听起来您需要选项 3。
但是,正确配置的缓存通常就足够了。例如,您可以将尚未执行的订单标记为未缓存(max-age=0),但是一旦执行,您可以将其标记为无限期缓存,因为它不能再更改。