我发现使用REST API响应PUT或POST命令时最佳实践的细节非常少。收集REST API后的JSON响应
假设的例子是,API是在电影存储电影的列表,并有以下几点:
- 获取API /电影
- 获取API /电影/(编号)
- PUT API /电影/
- PUT API /电影/(编号)
- POST API /电影/
- POST API /电影/(编号)
您可以在哪里放置或发布单个或集合。我将两者都包括在内,因为我不想讨论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。如果一部分收集失败或一个实体出现故障,我是否应该返回另一个状态?
状态码应该用来表示传输状态。服务器配置问题和未处理的异常通常会导致代码500.资源未找到,未经授权的访问等通常会导致代码4xx。代码200指示服务器验证了请求并发送了有效的响应。有效响应的有效负载200的确定取决于你的api的语义。 –
我是使用HTTP 303重定向成功的POST/PUT请求的粉丝。我绝对不会在HTTP 200中包含一个错误有效负载,除非这样的错误不能阻止请求完成:也就是说,新的资源是创建(POST)或更新(PUT)的,但是如果附加条件导致非负载致命错误。 – Palpatim
@lrb - 这是我对我的有效负载响应所假设的;传输过程中成功的错误。我还没有看到有关这方面的标准的详细信息与收集的答复,而且不同网站上的简要信息最多也是矛盾的。也就是说,许多API使用状态码进行处理(例如,twitter)。 – LimpingNinja