对多个对象(不存在的对象)的请求进行正确响应

时间:2013-12-12 15:16:28

标签: api http web

GET请求对多个对象的正确响应是什么,其中一个或多个对象不存在? e.g:

http://domain.net/event-list/?ids=1&ids=5&ids=3

其中id为5的对象不存在。我应该返回仅包含对象1和3的列表,还是应该返回某种错误?什么是正确的答案?

我也想知道如果请求是POST,行为应该是不同的。例如:

$.post('domain.net/events/bulk-edit/?ids=1&ids=5&ids=3', { public: true });

我应该只对存在的对象执行操作还是根本不执行操作并返回错误?

我知道如果非空的查询字符串可用于POST请求,那么会有一些争论。我认为它们对于这种特殊情况是好的,在这种情况下,您请求对象的子集对它们执行某些操作。

1 个答案:

答案 0 :(得分:0)

好的,我给了它一些想法,这就是我认为正确的事情。

这是一个令人头疼的问题,因为您一次请求多个对象(通常是WebDAV),会带来诸如207/Multistatus响应之类的奇迹。让我先说我认为你的查询字符串格式错误。我认为它应该是这样的:

?ids[]=1&ids[]=5&ids[]=3

现在关于GET请求的回复。我相信以下响应代码是正确的:

  • 200,如果
  • 找到任何对象 错误或空ids查询参数
  • 400(除非您认为ids不应转换为获取所有对象
  • 404,如果给定ID的 none 与任何对象匹配

如果您想通知客户端部分请求无法满足,您可以随时发送Warning标题(cf RFC 2616, sec 14.46)。但是,如果你真的想要做到绝对正确,那么这里是如何处理不是每个id都有效的请求:

  • 如果所有 ID都可用于加载对象,请发送200/Ok响应代码
  • 如果任何 ID无法用于加载对象,则通过301/Moved Permanently重定向到新网址时会发现有问题的ids个参数

关于POST请求:我的理解是,您希望将多个事件一次性设置为公开?如果是这样,我真的会更改顺序:发送POSThttp://domain.net/events/publish并在帖子正文中发送ID。