【问题标题】:Adding extra field in JSON in backend code在后端代码中的 JSON 中添加额外的字段
【发布时间】:2018-03-24 00:08:15
【问题描述】:

我打算在后端的 Json 响应中添加一个额外的字段。 由于这个 API 被很多客户端使用,我将无法更改每个客户端。 这会影响现有的前端客户端功能吗?

【问题讨论】:

  • 我认为如果您添加一个额外的字段,它不会影响现有的客户,因为他们仍然会获得他们需要的所有数据。
  • 取决于您在这些客户端中如何解析 JSON。
  • 它不应该只要您以正确的格式发送响应。另请阅读stackoverflow.com/help/how-to-ask 和 MCVE。如果您不向我们展示任何代码,您希望我们如何帮助您解决问题?

标签: javascript java json rest api


【解决方案1】:

这会影响现有客户吗?

如果不审核所有客户,我们就无法知道。

这会影响现有客户吗?

不,它不应该,但是...

这会影响现有客户吗?

是的。一些客户端可能会枚举 JSON 文档中的字段(更常见于 RPC 样式的 API、元编程或反射)。它们可能会或可能不会彻底中断,但在这种情况下,结果是未指定的。

那我该怎么办?

有两种选择:

  1. 添加新字段应该是安全的。基于总体风险较低的预期,您只需添加字段即可。 (IMO 这是务实的选择。)

  2. 您创建一个添加字段的新 API,可以是 /v2/ 或其他具有额外字段的端点,因此新客户端可以选择加入新数据,而旧客户端不受影响。 (这是防弹选项。)

如果客户端在请求中传递某些标头,您也可以选择加入新字段,以便人们可以在新 API 发布之前测试其客户端的兼容性(基本上是 #2,但是临时的)。

哪种解决方案合适取决于您的 API 客户端的性质和数量。例如,如果您在嵌入式设备中有大量客户端,您可能不应该更改现有的 API。 OTOH,如果您的客户端都使用通用库与您的 API 交互并且可以轻松更新,您可以先更新客户端库,然后在大多数客户端更新后更新 API。

我可以让这更容易吗?

是的,如果您有一份 API 合同/设计文档声明“客户应该期望可以将新字段添加到现有端点”,那么这实际上始终是一种安全操作。

最好考虑一下您对向后兼容性、弃用和升级的总体立场。展望未来,您应该把它写下来,以便您和您的客户对您的 API 将如何发展有相同的期望。这样,您可以参考设计文档来做出决定,而客户作者可以参考它来做出适当的编程决策。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2019-01-28
    • 1970-01-01
    相关资源
    最近更新 更多