用于改变子资源状态的REST方法

时间:2016-04-20 10:07:18

标签: json rest http

目前我有一个REST API,它表示具有两个不同子资源的资源:资源错误和有效条目。以前这个结构是不可变的:如果你有一个错误,它将保持错误,如果你有有效的条目,他们将保留为有效的条目。以下是一个示例JSON输出:

GET /resource/1
{
  "resourceId" : 1,
  "errors" : [ 
    { "id": 1, "errorDetails" : "it isn't right" } 
  ],
  "validData" : [
    { "id": 1, "message" : "it's good!" }
  ]
}

要求纠正错误以使其有效。所以本质上操作后的结果是

GET /resource/1
{
  "resourceId" : 1,
  "errors" : [],
  "validData" : [
    { "id": 1, "message" : "it's good!" },
    { "id": 2, "message" : "Corrected, old data was : it isn't right" }
  ]
}

校正过程需要一些额外的参数,然后a)创建一个新的错误条目,因为提供的参数没有纠正错误或b)创建一个新的有效条目,因为错误已被纠正。

从REST角度来看,表示此问题的最佳方式是什么? 到目前为止,我有以下想法:

  1. 对错误进行PUT / DELETE,即PUT / resource / 1 / errors / 1和参数。这将导致在/ resources / 1 / errors或/ resources / 1 / validDate
  2. 下创建新的子资源
  3. 在根资源上有一个PUT,即PUT / resource / 1,当你从一侧移动到另一侧时整体修改资源时引用了错误

1 个答案:

答案 0 :(得分:1)

我会使用选项1并自己制作错误资源,因为它们意味着什么,并且也有一些行为(检查它们是否可以删除)。它应该是POST,因为它是服务器端的必要处理(如果我当前理解的话),以确定实际将要做什么。

某些“重要”的东西应该是一种资源,因此选项2似乎不是最佳的。

次要注意:已经拥有id 可能的所有内容都应该是资源,对于“数据”也是如此。此外,除非有一个非常好的理由明确泄漏这些东西的ID,我宁愿将URI归还给这些东西而不是ID。