响应 200 错误或响应代码作为错误代码

2024-01-23

所以,作为一名开发人员,我有一个非常基本的问题,休息标准我们有特定原因的 100 个错误代码 like:

  1. 4xx 如果资源相关
  2. 5xx 如果服务器发生异常

还有很多。

现在,当谈到实施时,我们会遇到一些情况直接返回404 as the 响应状态码 以及响应正文中的错误消息。对于这种方法,我认为有一点令人困惑,什么如果 URI 本身从未被创建过,这意味着假设 /a/b 没有实现并且是他们响应 404 的任何服务器,并且作为客户他们检查代码并说user如果他们使用此 API 搜索用户,则找不到。

相反,我的感觉(如果我错了请纠正我)是如果调用在服务器中成功完成(没有任何异常和错误)我们返回 200 并在响应正文中以特定格式返回,例如:

{
   "status" : boolean, // if the overall call succeeded
   "message" : string, // message from server
   "code" : integer, // code, http code or business level code 
   "data" : object,//actual data
   "type" : string, // type of the data like object, basic, array,  (basically a value from enum)
}

任何调用的响应代码始终为 200,具体代码可在code响应格式的键。

现在从客户端的角度来讨论这些 REST 调用的用法,在客户端中是否是浏览器、IOS、Android 或桌面应用程序,我们调用 API 并检查 200 as the 响应码我们所有的进一步功能都将依赖于status & code响应主体本身的键。再次如果响应代码本身不是 200那么这实际上是服务器的问题。

谈到 API 的 SDK 实现,我们可以在其中执行相同的操作,方法是始终检查status and code如果Response Code为200,则直接拒绝非200 Response Code。

我觉得通过这种方法,客户端和 SDK 端的实现将更加通用和直接。

如果我错了请纠正我?请发表一些看法。

提前致谢。


没有“REST 标准”。

然而,有一个HTTP标准 https://www.rfc-editor.org/rfc/rfc7231,以及REST 的原始定义 https://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm强调一个概念统一接口 https://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_5客户端和服务器之间。

通过根据 HTTP 标准使用错误代码,可以使您的接口与其他 HTTP 接口更加统一。这使得在处理 API 时可以重用更多现有的 HTTP 客户端代码。

例如:

  • 大多数客户端在收到意外状态代码时会自动停止处理响应。如果您总是发送 200(OK),他们需要额外的逻辑以免混淆。
  • 有些客户端可以在收到请求时自动重试503服务不可用) https://www.rfc-editor.org/rfc/rfc7231#section-6.6.4.
  • 有客户可以cache https://developer.mozilla.org/en-US/docs/Web/HTTP/CachingHTTP 响应取决于其状态代码。

请注意,没有什么可以阻止您发送custom响应负载中的错误代码,如您的示例中所示,此外标准 HTTP 状态代码。 (事实上​​,这是一种常见的做法,它本身已经在RFC 7807 https://www.rfc-editor.org/rfc/rfc7807.)

现在,您完全有可能不需要统一的界面。正如评论所指出的,也许你正在构建一些内部的东西。

但如果你不想要一个统一的界面,那么你根本就不需要“REST”。也许你真正需要的是RPC https://en.wikipedia.org/wiki/Remote_procedure_call接口,例如JSON-RPC http://www.jsonrpc.org/ or gRPC https://grpc.io/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

响应 200 错误或响应代码作为错误代码 的相关文章

  • 删除 servlet 中的 cookie 时出现问题

    我尝试使用以下代码删除 servlet 中的 cookie Cookie minIdCookie null for Cookie c req getCookies if c getName equals iPlanetDirectoryPr
  • 发送 Microsoft Graph 请求事件返回 400

    我能够通过将 JSON 请求发布到https graph microsoft com v1 0 me calendar events https graph microsoft com v1 0 me calendar events 我已经
  • 服务器返回网页 404,但页面在浏览器中显示正常 - 为什么?

    一个奇怪的网页横亘在我面前 作为一名开发人员 我必须解开这个谜团 在任何浏览器中访问网页时 一切似乎都很正常 网页按预期显示 但是当查看控制台时 服务器实际上返回了 404 状态代码 那么浏览器为什么要渲染页面呢 查看正文显示返回了有效的
  • 使用 https 的 Java Jersey RESTful Web 服务

    我是 Java EE 的新手 正在开发一个 RESTful API 其中每个 API 调用用户都会发送编码的凭据 我的问题是如何通过默认的 http 实现 https 协议并确保我的连接安全 我正在使用 Jersey Restful Web
  • Mandrill 通过 REST API 作为单独的消息发送给多人

    我正在尝试使用山魈发送邮件 问题是 当我将多个收件人添加到 收件人 参数时 它会多次向 收件人 列表中的所有收件人发送同一封邮件 我期望将相同的邮件单独发送给列表中的每个人 我错过了什么吗 key app key template name
  • 精简 PHP 和 GET 参数

    我使用 Slim PHP 作为 RESTful API 的框架 如何在 Slim PHP 中从 URL 获取 GET 参数 例如 如果我想使用以下内容 http api example com dataset schools zip 999
  • 如何限制 JSON 访问?

    我有一个 Web 应用程序 可以从新创建的 JSON API 中提取数据 我的静态 HTML 页面通过 JavaScript 从静态 HTML 页面动态调用 JSON API 如何限制对 JSON API 的访问 以便只有我 我的网站 可以
  • 如何使用 http 将 Android 中的文件从移动设备发送到服务器?

    在android中 如何使用http将文件 数据 从移动设备发送到服务器 很简单 您可以使用 Post 请求并将文件作为二进制 字节数组 提交 String url http yourserver File file new File En
  • 如何使用 Emacs 通过 HTTP 打开远程文件?

    大多数开源软件都通过某些 HTTP 服务公开其代码 我想从 Emacs 打开并浏览此类代码 但 AFAICS trapmp 只允许ssh and ftp 因此 我的第一个问题是如何打开 HTTP URL 以便在 Emacs 中进行读取 然后
  • 根据客户端发送 HTML 或 JSON 响应

    我有一个带有 Eloquent 实体及其各自的 Laravel 应用程序RESTful 资源控制器 http laravel com docs 5 0 controllers restful resource controllers 如下所
  • Web API 的 ASP.NET MVC Core 控制器 PATCH 方法

    给定一个数据库表 Person 包含 3 列 Id 名字和姓氏 使用真实的 DbContext 时 ASP NET Core Web API MVC 控制器方法 PATCH 仅修改姓氏 看起来如何 我根本不知道如何实现它 并且找不到相关教程
  • Chrome 开发工具无法显示响应,即使返回的内容具有标题 Content-Type:text/html;字符集=UTF-8

    为什么我的 Chrome 开发者工具显示 无法显示响应数据 当返回的内容是text html类型时响应 在开发者工具中查看返回的响应的替代方法是什么 我认为只有当您选中 保留日志 并且您在导航离开后尝试查看先前请求的响应数据时 才会发生这种
  • ASP.NET Core URL 重写

    我正在尝试将我的网站从 www 重定向到非 www 规则以及 http 到 https https example com https example com 在中间件中 我曾经在 web config 中进行这些重定向更改 例如
  • Yammer API 限制

    Yammer Rest api 文档表示 每个应用程序每个用户在 10 秒内最多可以发出 10 个请求 问题 什么是user这里 是为当前经过身份验证的 yammer 用户发出请求的 IP 地址还是承载令牌 如果我们所有的用户都使用相同的外
  • NodeJS:将 JSON 保存到 MongoDB

    我正在尝试从 API 获取 JSON 并将其存储到 MongoDB 数据库中 显然 这是行不通的 我的应用程序似乎停留在我尝试将数据保存到数据库的位置 请告知该怎么做 这是我的代码 var express require express v
  • 面向服务的架构 - AMQP 或 HTTP

    一点背景 非常大的整体 Django 应用程序 所有组件都使用相同的数据库 我们需要分离服务 以便我们可以独立升级系统的某些部分而不影响其余部分 我们使用 RabbitMQ 作为 Celery 的代理 现在我们有两个选择 使用 REST 接
  • REST - 复杂的应用程序

    我正在努力将 RESTful 原则应用到我正在开发的新 Web 应用程序中 特别是 为了实现 RESTful 每个 HTTP 请求本身都应该携带足够的信息 以便其接收者对其进行处理 从而与 HTTP 的无状态性质完全一致 该应用程序允许用户
  • python 2.7 中的 HTTP 2 请求

    在 python 中向 HTTP 1 和 HTTP 2 发出请求有什么区别吗 我可以像这样在 python 中进行 HTTP 1 x 调用 url http someURL values param1 key param2 key2 dat
  • JS 库请求的常见 HTTP 标头是什么?

    使用JavaScript 框架原型 http www prototypejs org 我注意到 Ajax 请求通过一个名为X Requested With 其他 JavaScript 库 如 jQuery dojo 和 YUI 是否会向其
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho

随机推荐

  • SQL中可以使用IF/Else吗?

    SQL中可以使用if else吗 如果我有一张名为supplier与列 sid gt 主键 sname and city 那么我希望 select sid from supplier where city taipei 如果不为空 Or s
  • 在应用程序安装时创建小部件

    我只是想知道 有什么方法可以让 Android 小部件在用户安装我的应用程序时显示在用户的主屏幕上吗 另外 我可以让他们选择从我的应用程序中创建小部件吗 我只是想知道 有什么方法可以让 Android 小部件在用户安装我的应用程序时显示在用
  • Eclipse 首选项存储持久性

    我有一个多用户 位置 RCP 应用程序 当前使用多个用户可配置选项 有些偏好是特定于电台的 有些偏好是特定于用户的 这些选项来自首选项存储 它将 prefs 文件保存到 workspace metadata plugins org ecli
  • 如何在 Django REST 中通过多对多发布模型

    我有一个具有多对多连接的模型 我想让这个模型在 Django REST 中可用 默认情况下 这样的模型是只读的 但我也想写 此外 如果能够将直通连接的信息作为嵌套模型集成到 GET 中 那就太好了 class KeyDateCase mod
  • 如何在没有HQL的情况下在Hibernate中执行普通的SQL查询?

    我有一个非常复杂的联接查询来从数据库中选择几个项目 并且它不涉及返回该表所需的任何更新 这就是为什么我不想使用 HQL Hibernate 查询语言 而是想作为简单的 SQL 查询来执行 是否可以在 hibernate 中执行涉及 3 个不
  • Bash - 如何列出大小以字节为单位的文件

    我想使用 ls 命令输出目录中的文件 但我需要文件大小 以字节为单位 这可以用 ls 命令实现吗 在类似的问题上我发现了这个ls l block size M它以兆字节为单位输出文件大小 但是我似乎无法让它只使用字节 如果您正在寻找有关文件
  • CRTP 避免虚拟成员函数开销

    In CRTP避免动态多态 https stackoverflow com questions 262254 c crtp to avoid dynamic polymorphism 提出以下解决方案以避免虚拟成员函数的开销并强加特定的接口
  • NODEJS 上的简单 SQL 查询从本地数据库获取并显示在本地系统上

    我正在尝试在浏览器上显示 JSON 格式的数据 任何建议 我在下面给出了我的 javascript js 代码 我正在尝试使用 Node JS 执行这个简单的查询 但它没有 似乎可行 数据库没有密码 我想做的就是在上以 JSON 格式显示答
  • 查找不匹配的记录

    这是一个mysql问题 我有两个表 一个称为表单 另一个称为记录 记录是每个表格的记录 我可以有多个记录与一个表单 ID 关联 然而 并非所有表单都有关联的记录 我想找到所有没有记录的表格 我能做的最好的就是这个 SELECT FROM f
  • 平移线的一部分

    我有一堆文件正在从一个 wiki 基于 Markdown 移动到另一个 基于 Creole 我已经编写了几个 sed 脚本来处理诸如转换链接格式和标头格式之类的事情 但新的 wiki 允许目录结构 我宁愿使用它而不是我现在拥有的伪目录结构
  • 在 MongoDB 中应该如何建模以下多对多关系?

    假设我的学生和老师处于多对多关系 如果我只想找出给定学生的所有教师 反之亦然 我通常使用嵌入式对象 ID 对其进行建模 例如 如果教师有一个属性 StudentIds 它是学生对象 Id 的数组 那么这足以完成您需要的所有查询 然而 假设学
  • 如何在R中删除包含少于3行数据的组? [复制]

    这个问题在这里已经有答案了 我在 R 中使用 dplyr 包 并按 3 个变量 年份 站点 巢穴 对数据进行分组 我想删除少于 3 行的组 例如 在下面的示例中 我想删除 2 的行 我有很多数据可以用来做这件事 所以虽然我可以费力地手工做这
  • POST方法总是返回403 Forbidden

    我读过了Django CSRF 验证失败 https stackoverflow com questions 4547639 django csrf verification failed以及与 django 和 POST 方法相关的几个问
  • 将具有相同属性的两个对象的方法合并到每个属性的数组中

    我试图将两个对象的方法合并为一个对象 以便为父对象中的每个属性生成一组方法 obj1 prop1 method1 prop2 method2 obj2 prop1 method3 prop2 method4 期望的输出 obj1 prop1
  • Phonegap和Android溢出问题

    看来Android webview根本不关心overflow hidden当 div 溢出时的 css 属性 我拿了一个伟大的代码使用 HTML CSS 进行 GPU 转换的教程 http coenraets org blog 2013 0
  • System.Web.Routing.RouteCollection 和 System.Web.Mvc.RouteCollectionExtensions 都具有相同的简单名称“IgnoreRouteInternal”

    我有一个 ASP NET MVC 项目 我已经快两个月没有工作了 只要我不更改任何代码 在浏览器中调试就可以正常工作 当我修改任何代码 甚至添加空格时 我都会收到此错误 An exception of type System NotSupp
  • 如何在 UIImage 中仅显示图像的一部分?

    I have UIImageView我在其中显示 50x100 图像 我只想显示 50x50 图像的一部分 顶部 我怎样才能做到这一点 在里面移动大图像的非常简单的方法UI图像视图如下 让我们有一张大小为 100 400 的图像 代表某张图
  • 嵌入:mono 与 lua

    我有兴趣了解人们在 C C 应用程序中嵌入 mono NET 的开源实现 的经验 如何分发这样的应用程序以及依赖项是什么 我已经在 OS X 上进行了测试 mono 是一个巨大的框架 数百 MB 我的应用程序的用户都需要这个大框架吗 或者可
  • UI 存储数据的最佳方式是什么

    我正在做一个应用程序 页面上将显示多个项目 对于每个项目都会有很多信息 数据完全在 aspx cs后面的代码中生成并显示在ui中 当用户将鼠标悬停在特定项目上时 除了可见元素之外 我还需要后面代码中的一些其他信息来获取该项目 现在我正在存储
  • 响应 200 错误或响应代码作为错误代码

    所以 作为一名开发人员 我有一个非常基本的问题 休息标准我们有特定原因的 100 个错误代码 like 4xx 如果资源相关 5xx 如果服务器发生异常 还有很多 现在 当谈到实施时 我们会遇到一些情况直接返回404 as the 响应状态