今天和同事一起讨论新服务的架构,并且有一个概念我遇到了一些问题。
真的有两个问题,第一个是https://ruben.verborgh.org/blog/2012/08/24/rest-wheres-my-state/中使用的图像示例是否仍然被视为有状态,如果我们引入两个更改:
GET /nextImage?userId // Does NOT update the value of current image
// Updating current image requires setting it explicitly:
PUT /currentImage?value=X // X being the image number
如果答案是“否”,那对我来说可能会更有意义,但让我们继续。
我们正在讨论的服务是一个单词预测服务,它具有“用户字典单词”的附加功能 - 它不仅可以预测服务中静态字典中的单词,还可以预测用户提供的单词。
我建议将服务设为无状态:
GET /predictions?userId=X&text=Y&words=Z
text
是用户编写的文本,words
是“用户词典单词”列表,响应是符合text
参数的单词列表(包括那些来自words
)。
我的同事的建议:
不是在每个请求中发送words
,而是将它们放在数据库中(由用户ID标识并通过单独的RESTful API进行操作),然后发送请求:
GET /predictions?userId=X&text=Y
据说这也是无状态的,但我不太清楚为什么 - 数据库中的这个单词列表是不是等同于存储currentImage
的值并因此有状态?