前端/客户端显示项目列表。向后端/ API请求更改某些项。例如,添加一项或删除一项。后端成功处理此请求后,如何在客户端反映这些更改?
示例:
POST请求,该请求将新项目添加到列表中。响应正文包含添加的项目。 Http状态码201已创建
向后端删除请求,该后端从列表中删除了一个项目。响应主体不包含任何内容。 Http状态码204 NO CONTENT
解决方案?
成功处理完请求(客户端收到2xx状态代码)后,将从后端再次获取完整列表。缺点:这意味着我们有两个要求。首先是POST,然后是GET。
返回POST请求的响应正文中的完整列表。这似乎很奇怪,因为客户端如何使用API会影响API的行为。
在从后端收到2xx后,客户端将自行处理项目的添加或删除。优点:只有一个要求。缺点:如果有多个用户对数据进行操作,则会出现问题。如何使所有内容保持同步?
在清洁API设计方面,是否有常见的处理方式?我注意到,如果您更改数据,很多工具只会发出一个请求。想想Trello或类似的东西。
答案 0 :(得分:0)
如何使所有内容保持同步?
在REST中,您不需要。每个客户端(可能)都有自己的本地缓存。服务器在其响应中包含standardized caching metadata,以向客户端提示信息可能多久更改一次。
Cache invalidation是标准化的,但是只有HTTP请求通过的缓存才会看到触发请求。因此,除非您的客户端共享缓存(在HTTPS的世界中不太可能),否则有人将拥有过时的数据。
当然,服务器仍具有权威副本,当客户端数据过时时,我们有standardized conditional requests为我们提供了选择。
后端成功处理此请求后,如何在客户端反映这些更改?
HTTP规范的一部分描述了如何识别HTTP消息中的表示形式。它包括这段话
如果响应具有Content-Location标头字段,并且其字段值是对与有效请求URI相同的URI的引用,则有效负载表示由有效请求URI标识的资源。
因此POST /foo
PUT /foo
PATCH /foo
具有标准化的方式来宣布响应中包含的表示形式是/foo
的新表示形式
据我所知,没有任何标准化的方式来传达副作用;也就是说要改变其他资源。我们必须依靠缓存失效语义。
在大多数情况下,REST是一堆假装为Web浏览器的机器,它们与假装为Web服务器的机器进行通信。
REST接口被设计为对于大颗粒超媒体数据传输是高效的,针对Web的常见情况进行了优化,但是导致的接口对于其他形式的体系结构交互不是最佳的。 -Fielding, 2000