部分有效负载的RESTful服务响应代码

时间:2014-10-31 03:30:41

标签: rest asp.net-web-api http-status-codes nancy

我有一个带有2个查询参数的RESTFul服务,比如paramOne& Paramtwo
可能的URL将是

  

http://someApi/someResource?paramone=1&paramtwo=2
   http://someApi/someResource?paramone=1
   http://someApi/someResource?paramtwo=2

paramOne&之间的关系Paramtwo是一对多的。因此,对于第二个路径,结果将包含一组对象。现在,如果我们发送的参数无效,那么服务将返回400 BAD REQUEST

这是我的问题。如果用户通过提供一个有效的和其他无效的参数(例如http://someApi/someResource?paramone=1&paramtwo=invalidData)来请求那么HTTP状态代码是什么?是BAD REQUEST吗?或者基于paramone的对象集合? (因为paramone是有效的)

Robustness Principle:"保守你所做的[发送],在你接受的内容中保持自由。",我希望收集并忽略无效Paramtwo。并且,当涉及DELETE操作时,这会删除paramone的所有对象。这样或者应该是坏请求可以吗?


谢谢:)

1 个答案:

答案 0 :(得分:1)

在REST中,URI应被视为原子标识符,包括查询字符串。理论上,这意味着您应该返回404 Not Found,即使应用查询字符串的基本资源存在。但是,我相信大多数API都更加务实,并且基于最不惊讶的原则,往往会在无效的查询字符串参数上返回400 Bad Request。如果这是一贯的,那很好。

我认为最好拒绝整个请求并明确指出错误,并期望用户更正错误,而不是在用户可能忽略错误的情况下取得部分成功。如果您希望请求部分成功,则HTTP没有标准,但您可以根据需要采用207 Multi-Status WebDav响应。