集合的REST API post的JSON响应

时间:2015-10-27 20:32:11

标签: json api rest

在使用REST API响应PUT或POST命令时,我发现了很少有关最佳实践的细节。

假设示例是API用于电影商店中的电影列表,并具有以下内容:

  • GET api / Movies
  • GET api / Movies / {id}
  • PUT api / Movies /
  • PUT api / Movies / {id}
  • POST api / Movies /
  • POST api / Movies / {id}

您可以在哪里PUT或POST单个或集合。我将两者都包括在内,因为我不想讨论PUT与POST,并希望得到最佳实践的答案,特别是对错误的回应。

如果处理单个项目,我可以轻松返回HTTP状态代码和响应,但是在处理集合的POST和PUT时应该做些什么,特别是在非幂等方法中?

我想回归包裹的想法如下:

{
   "version": "1.0"
   "status": 200,
   "errors": [
      // List of object id's, and errors
   ]
   "data": [
      // List of movies POSTed or PUT
   ]
}

为每个失败的特定ID生成错误,但我不确定它是否通过了关于整体状态和HttpStatus的气味测试。如果集合的一部分失败或单个实体失败,我应该返回另一个状态吗?

1 个答案:

答案 0 :(得分:4)

通常在REST中,操作需要完全成功或完全失败。像这样的操作应该是原子的和幂等的。

所以你所要求的只是在REST可以为你做什么之外。从马的口中:

  

“如果您发现自己需要批处理操作,那么很可能您还没有定义足够的资源。”

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-743

那引用是什么意思?这并不意味着您不能拥有代表与其他几个资源(例如:您的集合)相同数据的资源,但如果您使用PUT进行更新,则仍然可以100%替换其内容。不是部分。