在使用REST API响应PUT或POST命令时,我发现了很少有关最佳实践的细节。
假设示例是API用于电影商店中的电影列表,并具有以下内容:
您可以在哪里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的气味测试。如果集合的一部分失败或单个实体失败,我应该返回另一个状态吗?
答案 0 :(得分:4)
通常在REST中,操作需要完全成功或完全失败。像这样的操作应该是原子的和幂等的。
所以你所要求的只是在REST可以为你做什么之外。从马的口中:
“如果您发现自己需要批处理操作,那么很可能您还没有定义足够的资源。”
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-743
那引用是什么意思?这并不意味着您不能拥有代表与其他几个资源(例如:您的集合)相同数据的资源,但如果您使用PUT
进行更新,则仍然可以100%替换其内容。不是部分。