我正在做一个项目,在与工作人员争论了一个多小时之后。我决定知道堆栈交换中的人会说些什么。
我们正在为系统编写API,有一个查询应返回组织树或目标树。
组织树是用户所在的组织,换句话说,该树应始终存在。在组织中,应该始终存在目标树。(这是参数开始的地方)。如果树不存在,我的同事决定以状态码200回答响应是正确的。然后开始要求我修复我的代码,因为没有树时应用程序就崩溃了。
我会尽力避免火焰和愤怒。
我建议在没有树的情况下引发404错误。这至少会让我知道出了点问题。使用200时,我必须在成功回调中的响应中添加特殊检查以处理错误。我期望收到一个对象,但实际上可能会收到一个空响应,因为未找到任何内容。将响应标记为404听起来很公平。然后战争爆发了,我收到一条消息,说我不理解HTTP状态代码架构。所以我在这里,问在这种情况下404有什么问题?我什至得到了“它什么也没发现,所以返回200是正确的”的说法。我相信这是错误的,因为树应该一直存在。如果我们什么也没找到,并且期望得到结果,则应该是404。
更多信息,
我忘记添加获取的网址。
组织机构
/OrgTree/Get
目标
/GoalTree/GetByDate?versionDate=...
/GoalTree/GetById?versionId=...
我的错误,两个参数都是必需的。如果提供了可以解析为日期的任何versionDate,它将返回关闭修订。如果您输入过去的内容,它将返回第一个修订版。如果按ID标识的ID不存在,我怀疑它将返回200的空响应。
额外
另外,我认为,对这个问题的最佳答案是在创建组织时创建默认对象,没有树不应该是有效的情况,应视为未定义的行为。没有两棵树就无法使用一个帐户。因此,它们应该始终存在。
我也链接了这个(一个相似但我找不到)
http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png
/GoalTree/GetById?versionId=CompletelyInvalidID
返回什么?不成功,因为/GoalTree/GetById?versionId=CompletelyInvalidID
实际上找不到命名的资源。