我想区分不同类型的“未找到”错误。例如,给出以下请求:
GET /author/Adams/works/HHGTTG
作者可能“找不到”或者作品可能“找不到”,我想区分两者。
状态:404 - 作者未找到
状态:404 - 找不到工作
根据规范,可以改变原因短语。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html
6.1.1状态代码和原因短语
......此处列出的原因只是建议 - 它们可能会被当地的等价物替换,而不会影响协议......
对同一状态代码使用两个独特的短语也可以接受吗?
而且,这是一种合理的方法,还是有更好的约定来表示更细微的错误?
最终我希望有一个客户端库可以抛出AuthorNotFound或WorkNotFound异常,而不是一般的AuthorOrWorkNotFound异常。
答案 0 :(得分:8)
您可以让HTTP响应的正文包含一条消息,您可以使用任何其他信息进行解析。
状态代码(在响应中)上的HTTP状态消息可以是您想要的任何内容,它不会影响任何客户端。 HTTP客户端通常会忽略消息文本。
答案 1 :(得分:4)
使用“阴影”未找到的方法时,您可以使用404与响应正文:
我仍然不推荐上面提到的子代码,它们为统一的HTTP接口增加了很多复杂性和维护工作。以不同方式构建api-client库。让它先调用/author/adams/work/11
。如果它返回404,则在旁边调用/author/adams/
以查明是否是导致404的缺失作者。然后,您可以抛出相应的NotFound异常。
另一种选择是以不同方式设计结束api-client应用程序。它首先应该调用/author/adams
然后如果不是404将继续/author/adams/work
。因此,应用程序本身就是在走下去的路径。但是,这当然只有在前端内部的页面流适应此调用序列时才有效。