使用 GET 请求将项目保存在数据库中

Using a GET request to persist items in database

我目前有一个包含两个 java 微服务的场景,比方说 StudentServiceUserService。两种服务都将数据保存在各自的 nosql 数据库中。

客户端进行 GET api/v1/students/{id}学生服务。在某些情况下,Student table 中的一些学生条目不包含字段 age。我目前从 UserService 检索该学生的年龄,并将其 return 返回给我的客户。

虽然这看起来很简单并且似乎有效,但我并不是这个解决方案的忠实粉丝,因为我们最终可能会为来自客户端的每个 GET 请求都生成一个嵌套请求(最坏的情况)。

我想到的替代方案是,当 StudentService 找不到学生的年龄时,它会从 UserTable 检索年龄,并将此字段添加到我的 UserTable。通过这样做,下次客户端为同一用户调用 GET api/v1/students/{id} 时,UserService 拥有它需要的一切而且我不必再去 UserService。

相反,用GET请求修改Table的内容并不理想。

很遗憾,由于遗留原因,无法对我的 Table 和服务的结构进行重大修改。

你们建议我如何继续?

继续将您需要的数据缓存到 table。

HTTP does not attempt to require the results of a GET to be safe. What it does is require that the semantics of the operation be safe, and therefore it is a fault of the implementation, not the interface or the user of that interface, if anything happens as a result that causes loss of property (money, BTW, is considered property for the sake of this definition). -- Fielding, 2002

Safe,在这里,意思是“本质上是 read-only”。这意味着通用组件(如网络爬虫)可以自行提交请求,而无需担心潜在成本。这意味着用户代理可以在用户决定单击 link.

之前“pre-fetch”资源

您的服务器对其底层数据存储的更改是实现细节,它不会更改请求的语义。