在使用 REST API 响应 PUT 或 POST 命令时,我发现有关最佳实践的细节非常少。
假设该示例是该 API 用于电影商店中的电影列表,并且具有以下内容:
- 获取 api/电影
- 获取 api/电影/{id}
- PUT api/电影/
- PUT api/电影/{id}
- POST api/电影/
- POST api/电影/{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 的嗅觉测试。如果部分集合失败或单个实体失败,我是否应该返回另一个状态?
最佳答案
通常在 REST 中一个操作需要完全成功或完全失败。像这样的操作应该是原子的和幂等的。
所以您要问的只是 REST 可以为您做的事情之外。来自马口:
"If you find yourself in need of a batch operation, then most likely you just haven’t defined enough resources."
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-743
那这句话是什么意思?这并不意味着你不能有一个资源代表与其他几个资源相同的数据(例如:你的集合),但如果你正在使用 PUT
来更新它,你仍然是 100%替换它的内容。不是部分。
关于集合的 REST API 帖子的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377927/