json - 使 API 抛出 HTTP 错误或返回空对象
问题描述
让 JSON-API 将纯 HTTP 错误代码或空数组/对象作为 JSON 返回到前端是否更优雅?
示例:
1. 前端合法地请求用户配置文件。
2. 自定义权限系统实现确定不允许该用户访问配置文件并返回403
(后端)。
3. 前端在很多地方都使用了类似 try/catch 的语法来解释错误代码。
使用的框架是 ASP.NET Core 和 Angular(用于指定上下文)。
解决方案
答案取决于错误和状态代码。一般来说,你不应该返回空数组或空对象之类的东西,除非那是字面上的结果。例如,如果有人请求一个Foo
s 的列表,但实际上没有,那么返回一个空数组是合适的。不过,那将是成功的 200 次。
对于 403 之类的内容,您应该不返回任何正文,或者如果您确实返回了正文,则它应该是一个错误对象,例如问题详细信息响应 - 不是空的。
403 是一种特殊情况,因为状态代码本身通常具有足够的描述性,甚至可能不需要添加其他信息。换句话说,客户端是被禁止的;原因通常并不重要,并且通常没有办法纠正它,假设他们已经过身份验证。如果没有真正的恢复方法,或者导致结果的原因不重要或不明显,那么您可以根本不返回任何响应正文。在所有其他情况下,您应该返回“某事”,即使它只是一个简单的字符串消息,以帮助客户端了解发生了什么。
当实际结果是空数组/对象时,应该保留空数组/对象,仅此而已。
推荐阅读
- python - 从子记录 Odoo V8 更新父级
- php - PHP:使用 lighttpd 获取用户的 IP 地址
- ruby-on-rails - 需要帮助重构以使用 .where 子句 - ruby on rails
- powershell - 我将如何编写一种方法来遍历 bitBucket 中的每个发布分支并将它们分隔在本地驱动器中自己的文件夹中?
- jquery - /?wc-ajax=checkout 504 错误但仍在付款
- laravel - Laravel Sanctum:机器对机器
- flutter - Flutter - 如何使用 ChangeNotifier 正确获取数据
- sql - 选择查询不返回任何记录
- r - gganimate “顺序错误(ind):参数 1 不是向量”
- rust - 由于未满足的特征边界,无法在 std::net::TcpStream 上调用读取