我有一个带有2个查询参数的RESTFul服务,比如paramOne
& Paramtwo
可能的URL将是
http://someApi/someResource?paramone=1¶mtwo=2
http://someApi/someResource?paramone=1
http://someApi/someResource?paramtwo=2
paramOne
&之间的关系Paramtwo
是一对多的。因此,对于第二个路径,结果将包含一组对象。现在,如果我们发送的参数无效,那么服务将返回400 BAD REQUEST
。
这是我的问题。如果用户通过提供一个有效的和其他无效的参数(例如http://someApi/someResource?paramone=1¶mtwo=invalidData
)来请求那么HTTP状态代码是什么?是BAD REQUEST
吗?或者基于paramone
的对象集合? (因为paramone是有效的)
从Robustness Principle:"保守你所做的[发送],在你接受的内容中保持自由。",我希望收集并忽略无效Paramtwo
。并且,当涉及DELETE
操作时,这会删除paramone
的所有对象。这样或者应该是坏请求可以吗?
谢谢:)
答案 0 :(得分:1)
在REST中,URI应被视为原子标识符,包括查询字符串。理论上,这意味着您应该返回404 Not Found
,即使应用查询字符串的基本资源存在。但是,我相信大多数API都更加务实,并且基于最不惊讶的原则,往往会在无效的查询字符串参数上返回400 Bad Request
。如果这是一贯的,那很好。
我认为最好拒绝整个请求并明确指出错误,并期望用户更正错误,而不是在用户可能忽略错误的情况下取得部分成功。如果您希望请求部分成功,则HTTP没有标准,但您可以根据需要采用207 Multi-Status
WebDav响应。