REST API如何在向后端发送请求后更新客户端数据

时间:2019-07-05 10:17:38

标签: rest api client backend

前端/客户端显示项目列表。向后端/ API请求更改某些项。例如,添加一项或删除一项。后端成功处理此请求后,如何在客户端反映这些更改?

示例:

    对后端的
  • POST请求,该请求将新项目添加到列表中。响应正文包含添加的项目。 Http状态码201已创建

  • 向后端删除请求,该后端从列表中删除了一个项目。响应主体不包含任何内容。 Http状态码204 NO CONTENT

解决方案?

  1. 成功处理完请求(客户端收到2xx状态代码)后,将从后端再次获取完整列表。缺点:这意味着我们有两个要求。首先是POST,然后是GET。

  2. 返回POST请求的响应正文中的完整列表。这似乎很奇怪,因为客户端如何使用API​​会影响API的行为。

  3. 在从后端收到2xx后,客户端将自行处理项目的添加或删除。优点:只有一个要求。缺点:如果有多个用户对数据进行操作,则会出现问题。如何使所有内容保持同步?

在清洁API设计方面,是否有常见的处理方式?我注意到,如果您更改数据,很多工具只会发出一个请求。想想Trello或类似的东西。

1 个答案:

答案 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