如何区分不存在的服务或缺少记录?

Posted

技术标签:

【中文标题】如何区分不存在的服务或缺少记录?【英文标题】:How to tell between a nonexistent service or a lack of a record? 【发布时间】:2014-11-15 09:56:33 【问题描述】:

我正在制作一些 REST 服务,并且在实现 GET 请求时,我正在讨论如果那里没有记录应该怎么做,例如/profile/1234。现在,如果您尝试使用/profiles/1234(请注意配置文件上的 s),那肯定是 404 代码,因为肯定找不到该 URL。但是当谈到没有1234 个人资料时,我不确定我应该返回什么。我不想返回,因为这可能会给人留下没有数据的记录的印象。但是如果我返回一个 404 错误代码,API 的使用者应该如何区分这两个 404 之间的区别?

我怎样才能成为负责任的 API 设计者,以编程方式传达不存在的服务和不存在的记录之间的区别?

【问题讨论】:

查看http状态码列表,似乎204可能是/profile/1234的合适代码 我不知道。 204 表示没有要返回的主体,是的 - 但为什么我会期望 GET 上的 204?我希望有 200 个。 What is the proper REST response code for a valid request but an empty data? 的可能重复项 在尝试建立我的论点以支持使用 404 而不是 204 时,偶然发现了重复项。似乎我的直觉在这一点上是正确的。 我接受“多数决定”返回 404,但我对此并不满意。 404 可能会导致隐藏的错误,即例程错误地假定记录不存在,而实际上 URL 中存在拼写错误。 【参考方案1】:

您可以发送自定义状态消息,帮助您区分“不同的”404s。

另一方面,我不会担心这种区别。人们习惯于仔细键入 api 端点。只要他们稍微手动测试他们的应用程序,问题就不会成为问题。

【讨论】:

以上是关于如何区分不存在的服务或缺少记录?的主要内容,如果未能解决你的问题,请参考以下文章

“Microsoft”中不存在类型或命名空间名称“Office”(是否缺少程序集引用?)

命名空间“Microsoft”中不存在类型或命名空间名称“AspNetCore”(您是不是缺少程序集引用?)

命名空间“CrystalDecisions.Web”中不存在类型或命名空间名称“CrystalReportViewer”(您是不是缺少程序集引用?)

错误 CS0234 名称空间“MvvmCross”中不存在类型或名称空间名称“Platforms”(您是不是缺少程序集引用?)

错误 CS0234:命名空间“UnityEditor”中不存在类型或命名空间名称“iOS”。您是不是缺少程序集参考?

命名空间“系统”中不存在类型或命名空间名称“事务”(您是不是缺少程序集引用?) - C# ASP.NET