在REST中实现禁用资源的最佳实践

时间:2014-07-30 15:50:30

标签: rest

我想知道是否有任何最佳实践可以使用REST实现“禁用操作”。禁用意味着清除所有字段中的数据,但资源本身就存在。

示例:

如果JSON中的资源表示是

{"id":"1", "data":["a", "b", "c"]}

然后在“禁用”之后,JSON中的资源表示变为

{"id":"1", "data":[]}

我正在考虑向资源添加禁用字段,例如

{"id":"1", "data":["a", "b", "c"], "disable":false}

然后进行部分更新(PATCH)以将“禁用”设置为true。现在来了,我想在“禁用”设置为true时自动删除数据,但是,我不知道这是不是一个好方法。我希望您的意见和任何您认为更好的替代方案。

请求看起来像(欢迎其他想法)

PATCH / resources / 1?disable = true

现在如果我们获取资源/资源/ 1,我们应该获取

{"id":"1", "data":[], "disable":true}

你们认为这是一个好方法还是我需要以其他方式做到这一点。关键问题是在更新一个字段时找出更新资源其他字段的良好/标准方法。

1 个答案:

答案 0 :(得分:0)

据我所知,这不是最佳做法。但是,在构建了一些RESTful API后,我有了一个意见。

以下是一些需要考虑的想法:

如果要继续使用disable属性,则将其置于JSON中可能是合适的,因为它成为资源的一部分。换句话说,禁用对此资源具有长期意义,以便API的使用者可能以有意义的方式向某个用户显示此值。

但是,如果你不是要持久化disable属性而只是根据disable更改数据的返回方式,那么我会做这样的事情:http:/// myresource?disable = true。我更喜欢这个,因为禁用不是资源的属性,而是api的一个函数,它改变了它的表示。

从我的角度来看,数据的表示应该与资源本身分开。或许可以想到这一点的方法是我返回JSON或XML。我是否已禁用JSON或启用JSON。

我不确定这里是否存在正确的答案,但我希望有所帮助。