以RESTful方式返回动态字段

时间:2014-07-03 13:31:50

标签: web-services rest http jersey

我有一个业务对象,其秘密需要在每次请求和查看对象时更改。每当此秘密发生变化时,新秘密都需要保存到数据存储区。目前,我已经设置了对象的GET更改密钥并保持更改,但这显然违反了REST设计。如何确保此秘密在每个渲染中是唯一的,同时避免通过GET更改任何数据?

我想我的用户POST就像object/{id}/secret这样会在调用时改变秘密。但是,如果你试图避免返回POST的有效载荷,这会导致一个问题:如何回复这个新秘密?

我不想返回一个指向这个新秘密的Location标题,因为这意味着我理论上可以GET多次url来获得相同的秘密,但是这个我的业务对象不允许使用。

有什么想法吗?

1 个答案:

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