400 Bad Request
。404 Not Found
。我的问题是,当客户端向我的API未提供服务的端点发送请求时,哪些状态代码更合适?
端点是否应被视为"资源",因此返回404
?我的问题是,如果客户端只检查状态代码,他们无法区分404
表示他们到达正确的端点,但没有与查询匹配的结果,而不是{{1表示他们查询了一个不存在的端点。
或者,我们是否应该期望客户端事先了解所有可用的API端点,从而将其请求视为格式错误,并在他们尝试访问的端点返回404
不存在?
这可能取决于端点是否为REST。如果它们是REST端点,则客户端不应该需要先前的API知识,而是能够通过从单个根端点导航API来了解所有相关的API端点。在这种情况下,我猜400
会更合适。
在我的具体情况下,这是一个内部(非REST)HTTP API,我希望客户端具有所有API端点的先验知识,所以我倾向于404
,以避免问题访问错误端点的400
可能被误解为404
,表明无法找到他们从正确端点搜索的内容。
思想?
答案 0 :(得分:3)
为方便起见,许多现代API提供了人类可读的端点,以方便开发人员。然而,REST的目的是将URL视为不透明 - 它们可能恰好包含语义内容,但不能依赖它来实现。没有“格式错误”的URL这样的东西。只有一个指向某个东西的URL和一个不指向某个URL的URL。
现在,这是REST教条(可以说也是HTTP 1.1规范)。这并不意味着你应该做的。如果您的API只有一个内部客户端,并且不会发生变化,那么您在设计自己的标准时可以灵活地很多。只要确保记录下来,特别是那些可能会让那些直接从大学毕业的人感到困惑,以便他们在你继续学习时替换你。