【问题标题】:What are developers their expectations when receiving a JSON response from a server开发人员在收到来自服务器的 JSON 响应时的期望是什么
【发布时间】:2014-07-02 17:14:02
【问题描述】:

我有运行 web 服务的 java 库,这些库以 XML 形式返回响应。 Web 服务都围绕提供有关项目的详细信息列表。最近,进行了更改以允许服务通过简单地将 XML 转换为 JSON 来返回 JSON。在查看响应时,我发现它们并不像我想象的那么容易解析。例如,返回项目详细信息的 Web 服务。

如果没有item,返回的JSON如下:

{"ItemResponse":""}

如果有 1 个项目,则响应如下(现在 itemResponse 有一个对象作为值而不是字符串):

{"ItemResponse":{"Items":{"Name":"Item1","Cost":"$5"}}}

如果有两个或更多项目,则响应是(现在项目有一个数组作为值而不是一个对象):

{"ItemResponse":{"Items":[{"Name":"Item1","Cost":"$5"},{"Name":"Item2","Cost":"$3"}]}}

要解析这些,您需要几个我认为很笨重的 if/else。

如果回答是:

  • 0 项:[]
  • 1 项:[{"Name":"Item1","Cost":"$5"}]
  • 2 项:[{"Name":"Item1","Cost":"$5"},{"Name":"Item2","Cost":"$3"}]

这样总是有一个数组,它包含itemdata。一个额外的包装对象是可能的:

  • 0 项:{“项”:[]}
  • 1 项:{"Items":[{"Name":"Item1","Cost":"$5"}]}
  • 2 个项目:{"Items":[{"Name":"Item1","Cost":"$5"},{"Name":"Item2","Cost":"$3"}]}

我在 JSON 方面没有经验,所以我的问题是,如果您是一名必须使用这些 Web 服务的开发人员,您希望如何格式化 JSON 响应?即使没有项目,总是返回一个一致的数组是否更好,或者这通常不重要?或者一个数组还不够,你真的希望数组周围有一个包装器对象吗?

关于此的约定/标准是什么?

【问题讨论】:

  • 重要的是记录输出的格式。如果您确实使用一致的格式(即始终拥有一个数组),那么您会发现记录它(并让用户处理它)要容易得多。我会选择第二个版本,因为它允许您添加不同类型的数据(包括错误!)...

标签: json


【解决方案1】:

不要切换结果类型,如果可能有更多项目,则始终返回一个数组。不要混合,对于 1 个项目,一个对象对于多个数组。这不是一个好主意。

另一个最佳实践是您应该对 API 进行版本控制。使用类似yoursite.com/api/v1/endpoint 的东西。如果您不这样做并且您更改了 API 的响应。您的所有客户端应用程序都会中断。因此,请与文档一起记住这一点。 (我过去经常看到这种情况发生......)

作为一名开发人员,我个人喜欢您的第二种方法,但这也是一种偏好。这没有标准。

【讨论】:

  • 目前还没有版本,我仍在开发中(但我会记住提示,谢谢)。我只是好奇 json 通常是如何格式化的。我的直觉和你的直觉一样告诉我:保持一致。
【解决方案2】:

使用 json 有几个原因:

  • 更加密集和紧凑:因此发送的数据更少
  • 在 javascript 中,您无需解析任何内容即可直接访问这些属性。这意味着您可以将其转换为读取属性的对象(通常用于 AJAX)
  • 同样在 java 中,您通常不需要自己解析 json - 有几个不错的库,例如 www.json.org/java/index.html
  • 如果您需要了解 json 是如何构建的...使用 google ...那里有大量信息。

对于您的实际问题:

尽管如此,如果没有特定要求,是否值得将 xml 转换为 json 是个问题。正如 Dieter 所说:这取决于谁已经在使用这项服务以及他们是如何被消费的……这意味着周围的环境非常重要。

【讨论】:

  • 目前还没有人使用它,我正在尝试以一种人们可以并且将使用它的方式来制作它——他们只需付出最小的努力。您是说我的问题中描述的三种方式中的哪一种方式对 JSON 进行格式化并不重要,并且它们都对开发人员同样可用?
猜你喜欢
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多