使用 HTTP 状态代码时区分基础架构和业务逻辑

2023-12-08

我们正在尝试构建一个 REST 接口,允许用户测试特定资源是否存在。假设我们正在销售域名:用户需要确定该域名是否可用。

An HTTP GET结合200 and 404乍一看,响应代码似乎很合理。

我们遇到的问题是区分查找服务成功服务的请求和其他组件在异常行为下服务的请求。例如:

  1. 404 and 200可以由实际阻止请求的中间代理返回。这可能是由于代理配置错误,甚至是外部基础设施(例如咖啡店 Wifi)使用了不良的基于表单的身份验证。

  2. 客户端可能使用损坏的 URL。这可能是由于弃用或(再次)错误配置而发生的。我们可以通过以下方式对抗前者301, 然而。

当前区分已成功满足客户请求意图的响应和通过异常行为提供的响应的最佳实践是什么?

通过响应主体隧道响应可以消除该问题,因为我们可以确保这些响应对于我们的服务来说是唯一的。然而,看起来不太安静!


只需让您的应用程序向其 HTTP 响应添加一些内容,以将其与中介抛出的响应区分开来。任何或所有这些都可以:

  • 有关响应内容中可识别为应用程序内容的错误的信息(例如,Application error: Domain name not found (404))
  • A Content-Type响应中的标头,指示响应内容应解码为应用程序错误(例如,Content-Type: application/vnd.domain-finder.error+json)
  • 响应中的自定义标头表明这是一个应用程序错误

一旦你实现了这样的方案,如果你的 API 客户端想要对应用程序错误和基础设施错误做出不同的反应,他们将需要了解你选择的机制,所以只需清楚地记录下来即可。

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

使用 HTTP 状态代码时区分基础架构和业务逻辑 的相关文章

  • RESTful 资源 - 接受对象列表

    我正在构建一个 RESTful 资源集合 其工作方式如下 我将使用 人 作为示例 GET people key returns a person object JSON GET people first name Bob returns a
  • Flask Restful API url

    我正在使用 Flask RESTful http flask restful readthedocs org en latest index html http flask restful readthedocs org en latest
  • Alamofire 仅在 GET 请求上出现请求错误

    我正在努力将我的项目从 AFNetworking 转移到 Alamofire 真的很喜欢这个项目 POST 请求工作得很好 但是 我在尝试发出 GET 请求时收到此错误 这是一些示例代码 class func listCloudCrednt
  • 有状态 WCF Web 服务

    我是 WCF 新手 我一直在尝试在 Web 服务中使用会话状态 我设法使用number http www codeproject com KB session SessionWithWS aspx msg 3227646 of http w
  • 如何让 HttpClient 返回状态码和响应正文?

    我试图让 Apache HttpClient 触发 HTTP 请求 然后显示 HTTP 响应代码 200 404 500 等 以及 HTTP 响应正文 文本字符串 重要的是要注意我正在使用v4 2 2因为大多数 HttpClient 示例都
  • 当查看 X-Auth-Token 与 Authorization 标头之间的差异时,哪个是首选?

    下面两个标题有什么区别 哪一个是首选 X Auth Token dadas123sad12 Authorization Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ Authorization是客户端使用的主要标头认证如
  • REST API 路由最佳实践

    我想知道当订单是一种资源时 为以下场景创建 REST API 的最佳实践是什么 获取数据库中的所有订单 当然不是实际场景 仅供理解 通过订单ID获取订单 根据订单ID获取单个订单 单个 GET 路由是否可以用于所有这些场景 或者我们应该针对
  • GlassFish Server 开源版 3.0.1 中缺少“Web 服务”节点

    我在 glassfish 的管理控制台中看不到 Web 服务 节点 GF 管理控制台左侧的树状菜单中的菜单项 有没有办法在 glassfish 中启用它 我应该下载 glassfish 的任何升级才能启用它吗 简短的回答 不 不 更长的答案
  • 在 PHP 中使用 file_get_contents 进行 PUT 请求的错误请求

    这个 api 调用使用 Postman REST 客户端 可以正常工作 但是当我的 GAE 应用程序中的服务器上发出请求时 我当前收到以下错误 HTTP 请求失败 在 C Projects app file php 第 26 行 打开流失败
  • PHP 错误请求中 HTTP 请求失败

    我可以直接从浏览器请求 URL Web 服务 WS 但是当我在代码中使用 file get contents 或 fopen 方法时 我收到一条错误消息 有人有不使用curl的解决方案吗 public function sendHttpRe
  • 与简单的文件请求相比,您预计 Web 服务请求的响应时间开销是多少?

    我正在开发一个 asp net Web 服务应用程序 以向使用 jQuery ajax 发出请求的小部件提供 json 格式的数据 我一直在使用 FireBug Net 视图来检查数据请求需要多长时间 在我最初的原型中 我只是请求静态 js
  • HTTPbis - bis 是什么意思?

    我经常看到 bis 附加到协议版本 例如 v 34bis 或 httpbis bis 是什么意思或代表什么 我认识的一位电信工程师认为它可能起源于法国 正如其他人已经说过的 bis 来自 两次 或 重复 http oxforddiction
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 为什么这个跨域ajax调用实际上有效?

    我无意中写了一个跨域AJAX调用NextBus http www nextbus com xmlFeedDocs NextBusXMLFeed pdf 使用 jQuery ajax url http webservices nextbus
  • 如何在PHP中完成http响应并进行进一步处理?

    就我而言 我需要向客户端回显一个标志并发送一封电子邮件 现在客户端需要等待电子邮件发送 但我想把这两个步骤分开 该怎么做呢 你可以看一下异步运行 PHP 任务 https stackoverflow com questions 858883
  • 如何使用 PATCH 更新简单的数据库字段?

    我是 php 和 API 的新手 我正在尝试学习这些方法 但我无法执行 PATCH 或 PUT 来更新我的简单 mysql 数据库 我使用了以下代码 if isset PATCH con mysqli connect localhost r
  • Google Closure 编译器和 multipart/form-data 不起作用

    我正在向 google 闭包编译器 API 服务发出请求 content file get contents file js url http closure compiler appspot com compile post true p
  • 使用 JAX-WS 的 WebLogic 中没有模式导入的单个 WSDL

    如何使用 JAX WS 配置由 WebLogic 10 3 6 生成的 Web 服务 以将对象架构包含在单个 WSDL 文件声明 而不是导入声明 中 示例代码 界面 import javax ejb Local Local public i
  • 创建rest api url以连接mysql数据库

    我想学习如何创建一个rest api url 以便我可以使用该url获取信息并将信息发布到我的mysql数据库中 谷歌搜索了很多并阅读了各种文章 但没有找到任何精确的内容可以学习 所有内容均以 about api 开头 以已创建的其余 ur

随机推荐

  • AVAssetReader 到 AudioQueueBuffer

    目前 我正在做一个小测试项目 看看是否可以从 AVAssetReader 获取样本 以便在 iOS 上使用 AudioQueue 进行播放 我读过这个 使用 AudioQueue 播放原始未压缩声音 没有声音 和这个 如何使用 AVAsse
  • NodeJS:在迭代之间等待的异步循环

    我试图在将对象数组 objects 保存到数据库 使用 mongoose 的 mongoDB 之前进行一些检查 这些对象已经按日期排序 因此objects 0 date 低于objects 1 date 每个对象应检查最后一个相关保存的对象
  • 方法名称应为 c#

    我有一个事件处理程序 我想将一些参数传递给事件 像这样 该行触发错误 需要方法名称 p Click new System EventHandler P Click sender new MyEventArgs design reader1
  • 使用链式方法和参数模拟调用

    我正在学习如何使用模拟来运行一些单元测试 但我不知道如何模拟我的数据库类 它由单独的方法组成 这些方法可以像这两个示例一样链接起来 db gt select someTblName fieldName gt where fieldName
  • 在 NativeScript 中检测应用程序不活动/空闲超时

    我需要检测用户在 NativeScript 应用程序中的不活动时间 我尝试了一些插件 例如 ng idle 但它们与 NativeScript 不兼容 我还尝试发出应用程序级别事件 在页面路由器出口中 但它也不起作用 任何帮助将不胜感激 在
  • Kivy 属性错误 - 对象没有属性 - 尝试用 kv 语言连接小部件

    我在尝试连接 Kivy 中的小部件时似乎遇到了不间断的问题 我读了这个有用的指南但我的情况没有直接涵盖 I have 2 different choosers side by side like this 每个选择器都是它自己的类 由 Ke
  • MVVM 可编辑组合框绑定

    这是我的问题 我有一个服务器列表 每个服务器都有一个 ID 和 ServerName 我希望能够从 ComboBox 中选择一个服务器并就地编辑它 然后使其 ID 可供稍后通过 SQL 更新 假设这是数据 ID 1 Name Server1
  • (MathLink) 正确处理从属内核生成的消息

    当工作通过MathLink对于从属内核 我在正确解析时遇到问题TextPackets 特别是当这样的数据包对应于Message由从属内核生成我根本不明白如何正确处理它 我需要这样的Messages打印在评估笔记本中 就好像它们是由主内核生成
  • 强制 Emmet (VS Code) 内嵌所有缩写

    我经常使用以下方法将部分 HTML 文本包装在标签内Emmet in VS Code 命令是 Emmet Wrap with Abbreviation Windows 上为 Alt Shift W 是否可以强制 Emmet 将我的所有选择内
  • 何时使用右值引用

    所以基本上我的问题是 什么时候应该使用右值引用 在这个例子中 我正在研究一个记录器类 它只是将内容记录到控制台 我有不同的功能来记录不同日志级别的消息 它们接受 std string 作为参数 每个函数是否应该有两个版本 第一个用于 正常
  • PHP 属性作为对象

    是否可以将类的属性设置为对象 Like class User public x public y new ErrorVO public w new array 在构造函数中 是的 class User public x public y n
  • 为什么内联事件处理程序属性在现代语义 HTML 中是一个坏主意?

    内联事件处理程序被认为是一种不好的做法吗 例如
  • 如何使用 LISTAGG 返回带引号前缀的行

    我正在尝试返回对于在查询中设置 in 条件有用的行 这是我的查询 SELECT LISTAGG PRODUCTID WITHIN GROUP ORDER BY RowSequence FROM DWRE ITEM V 返回订单1 订单2 我
  • CPU使用率(top的输出)总和怎么会超过100%呢?

    我正在编写一个小 python 脚本来测试一些东西 稍后我想用它通过 gnuplot 创建资源使用图 但首先进行一些测试 脚本看起来像 import subprocess result subprocess check output top
  • 如何链接到 Multimarkdown 中的命名锚点?

    我曾多次提到 MultiMarkdown 对内部链接 命名锚点的支持 但我无法找到如何实际执行此操作的单个示例 那么 表示命名锚点的语法是什么 链接到它的语法是什么 与链接到任何其他 URL 相同 仅使用 foo 而不是http 在标准 M
  • asmack 中的 ReconnectionManager

    我有一个Android项目 需要使用asmack库来实现实时聊天 关键功能是重新连接机制 这意味着我的应用程序可以在互联网连接丢失时自动重新连接 这是我的代码片段 ConnectionConfiguration connConfig new
  • VS 22 缓冲区溢出中的 C6386 警告

    我正在尝试创建一个函数 该函数获取矩阵并将其列向右或向左移动 具体取决于用户的重复输入 在执行此操作时 我注意到编译器警告 C6386 C6001 C6385 都在同一代码区域中 但我找不到问题 警告 C6386 写入 temp row 时
  • Bootstrap 4:将“滚动到第一个无效字段”添加到“如果无效则不要“提交”脚本)

    我在用Bootstrap 4如果以下脚本中的任何字段无效 我将停止提交表单 我试图弄清楚 到目前为止没有成功 我需要在 之后添加什么代码event stopPropagation 以使表单滚动到找到的第一个无效字段 感谢您的帮助 谢谢 Fo
  • 仅在 Woocommerce 3 中显示基于标签的相关产品

    默认情况下 单个产品页面上的 Woocommerce 根据类别显示相关产品 相关产品滑块将显示相同类别的产品 Woocommerce 文档指出 相关产品是一些模板的一部分 这些模板从您的商店中提取与当前产品共享相同标签或类别的产品 这些产品
  • 使用 HTTP 状态代码时区分基础架构和业务逻辑

    我们正在尝试构建一个 REST 接口 允许用户测试特定资源是否存在 假设我们正在销售域名 用户需要确定该域名是否可用 An HTTP GET结合200 and 404乍一看 响应代码似乎很合理 我们遇到的问题是区分查找服务成功服务的请求和其