使用 GET 请求将项目保存在数据库中
Using a GET request to persist items in database
我目前有一个包含两个 java 微服务的场景,比方说 StudentService 和 UserService。两种服务都将数据保存在各自的 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”资源
您的服务器对其底层数据存储的更改是实现细节,它不会更改请求的语义。
我目前有一个包含两个 java 微服务的场景,比方说 StudentService 和 UserService。两种服务都将数据保存在各自的 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”资源您的服务器对其底层数据存储的更改是实现细节,它不会更改请求的语义。