在不中断客户端的情况下使用 REST API 中的新属性扩展 JSON 响应?

Extend JSON response with new property in REST API without breaking clients?

提问人:komen 提问时间:11/15/2023 更新时间:11/15/2023 访问量:25

问:

如果有一个带有 GET 端点的 REST API,比如 /api/v1/unit/{id},它会返回一个描述单元的 JSON,如下所示:

{
   "id":123,
   "a":123
}

我是否可以使用新属性扩展返回的 JSON,并确保这不会给端点的当前使用者带来麻烦? 新的 JSON 将如下所示:

{
   "id" : 123,
   "a" : 123,
   "b" : 123
}

或者这是不好的做法,我应该创建一个返回 json 的“新版本”的新端点?例如:/api/v2/unit/{id}

JSON REST

评论

0赞 Moses01 11/15/2023
对不起,我不明白你需要什么?
0赞 komen 11/15/2023
问题是,使用新属性扩展 JSON 通常是否安全,或者这是否会给 end pont 的当前使用者带来麻烦。当前的消费者不知道将要引入的新“b”属性。
0赞 Moses01 11/15/2023
如果更改 API,现有脚本中不会有问题,因为它们会从 JSON 调用变量,如 result[“id”] 或 result[“a”],其中 result 是 JSON 的变量名称。您可以更新 API.请确保 id 和 a 等现有属性也出现在新的 API 调用中。
0赞 Jeremy Fiel 11/16/2023
您应该完全可以使用新属性扩展当前架构。这不是重大更改

答:

0赞 Michael Gantman 11/15/2023 #1

首先 - 关于打破客户端。这取决于您的客户。例如,如果你的 Json 被 Java 代码使用,有一种方法可以确保可以忽略未知的新属性。因此,您需要检查您的客户端是否可以处理此问题,以及它是否是默认行为,或者您是否需要修改客户端才能处理此问题。但一般来说,可以扩展你的 JSON 并让旧客户端工作。但是,您的新房产毫无用处 - 至少对老客户而言是这样。虽然这是可能的,但制作一个新的端点似乎是一个更干净的解决方案

评论

0赞 komen 11/15/2023
我认为这种情况存在一些最佳实践。我知道新属性对老客户毫无用处,因为他们(还)不知道,他们只关心“id”和“a”。但是新客户也对“b”感兴趣,这就是为什么我想在现有的 json 后面附加一个新属性,而不是创建一个全新的端点。
0赞 Michael Gantman 11/15/2023
这实际上取决于您的配置和应用程序。这两种方法都是有效的。您只需要了解优缺点并选择最适合您的一种