【问题标题】:What's the most efficient way to verify http-response's data验证http-response数据的最有效方法是什么
【发布时间】:2018-09-02 21:30:31
【问题描述】:

例如,当我在下面发出 http 请求时:

GET /我的盒子

并期待 json 格式的数据响应:

{
  a: (expecting a number),
  b: (expecting a string),
  c: (expecting 'apple', 'orange', or 'banana')
}

那么让我们假设我们的服务器程序永远不会出错。我们是否需要验证响应的内容数据以防出现一些网络错误?如果我们应该这样做,验证每个响应数据的最有效方法是什么。

【问题讨论】:

  • 您基本上只想确保收到 2​​00 响应代码,然后确保数据类型符合您的预期。
  • 是否有任何现有的机制或库可以使验证每个响应日期类型更高效、更容易。 @BooberBunz
  • 是的,“Google Gson”允许您在 Java 类中转换 JSON……但我不知道 javascript。

标签: javascript rest http frontend response


【解决方案1】:

总的来说,我认为您可以合理地期望响应是正确的。大多数开发人员会。如果您处理多个服务器以及这些服务器的多个实现相同协议的实现者,您可能无法信任它。

在这种情况下验证响应的一种方法是使用 json-schema 之类的东西。

但是,如果您不处理很多服务器,也许您可​​以问问自己在什么情况下响应可能是错误的。你有理由不信任它吗?

【讨论】:

  • 是的,这就是我一直在努力的问题。即使我确定服务器没有出错,每次都检查类型真的有必要吗?
  • 我什至可以在客户端/浏览器端编写一个中间件来检查每个响应中的类型。但我怀疑这项工作是否有必要。
  • 我不确定 100%,但是由于您似乎没有特殊或独特的情况,我认为您很清楚只是信任服务器。大多数人都这样做。
【解决方案2】:

最好创建一个可预测的 JSON 负载,该负载在成功和错误情况下都来自您的服务器。例如,如果我们遇到错误,可能是这样的有效负载:

{ error: true, errorMessage: 'Some error message', payload: null }

对于与网络相关的错误,您需要在客户端应用程序中处理相应的 HTTP 状态代码。更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

如果您想为从服务器传递到客户端的数据开发一个脊模式,您可能希望查看更适合 Protobuf 之类的格式。

见:

【讨论】:

  • 你认为有必要在每个响应中检查数据类型吗?
  • 没有正确设计的返回 JSON 的 API 应该要求您在每次调用时验证消息内容。 API 的端点应记录在案并具有可预测的输出以处理错误和成功案例。如果您使用的 API 没有可预测的输出,并在处理有效负载时检查数据助手的类型,那么可能是这样吗?但如果你继续这样做,你就会遇到更大的问题。
【解决方案3】:

当您在响应对象中设置您期望的字段的数据类型时,您需要验证响应数据。

例如:-

假设这是您期望作为响应对象的类:-

    public class example {
private String field1;
private int field2;
private bloolean field3;
}

如果在上面的字段中你得到 field1 作为一个 long 而不是 String 那么你会得到一个错误,检查服务器是否给出了你预期的响应。

【讨论】:

  • 很抱歉我之前没有将此标记为前端和 javascript 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
相关资源
最近更新 更多