我有一个业务对象,其秘密需要在每次请求和查看对象时更改。每当此秘密发生变化时,新秘密都需要保存到数据存储区。目前,我已经设置了对象的GET
更改密钥并保持更改,但这显然违反了REST设计。如何确保此秘密在每个渲染中是唯一的,同时避免通过GET
更改任何数据?
我想我的用户POST
就像object/{id}/secret
这样会在调用时改变秘密。但是,如果你试图避免返回POST
的有效载荷,这会导致一个问题:如何回复这个新秘密?
我不想返回一个指向这个新秘密的Location
标题,因为这意味着我理论上可以GET
多次url来获得相同的秘密,但是这个我的业务对象不允许使用。
有什么想法吗?
答案 0 :(得分:1)
如果资源状态随每个GET
请求而变化,我认为这违反了REST原则。想一想像上次访问的时间戳这样的事情'它是资源的一部分,不是由客户端设置的,而是随着每次访问而变化。这个秘密'非常相似。
所以我会使用GET
并让服务器更改秘密。
请求1:
GET /objects/1234
回应1:
200 OK
Content-Type: application/json
{
"id": 1234
"title": "foo",
"secret": "abcd"
}
请求2:
GET /objects/1234
回应2:
200 OK
Content-Type: application/json
{
"id": 1234
"title": "foo",
"secret": "efgh"
}