假设我正在构建一个带有调用的API,该调用返回一组城市,每个城市都与一个州有关系。一个州有很多城市,但一个城市只有一个州。
我可以想象将这种关系弄平,并模糊这些数据的基础结构,
{ cities : [
{ id: 1,
name: "Los Angeles",
state: "CA" }
]}
或者我可以想象构建JSON,以便城市和州之间的关系显而易见,
{ cities : [
{ id: 1,
name: "Los Angeles",
state: { id: 1,
name: "CA" }
]}
截至目前,API的消费者只需要知道州的名称。他不需要知道自己的身份证或获取有关州的更多信息的方法。以任何一种方式构造JSON的优缺点是什么?
答案 0 :(得分:2)
在我看来,你不应该向api添加无用的信息,但正如@kgb所说,如果你的api容易扩展,你应该这样设计。你问过城市和州之间的关系,我认为这种关系已经在两者中都有所定义。
因此,如果你100%确定你的api不会扩展状态功能,你应该选择1.如果只有一点点机会,我建议你这样做:
{ cities : [{
id: 1,
name: "Los Angeles",
state: { name: "CA" }
}]
}
答案 1 :(得分:1)
这取决于其他消费者。你有什么?你打算吗?
API是一种机器界面,消费者的开发人员同样可以轻松使用这两种结构。如果“state”实体不是复合实体(除了名称之外没有可用的属性),那么我最好只显示名称,而不是带有id的结构。
如果将来有可能状态id可能有用,或者有可能将新属性添加到状态实体,那么您应该从一开始就使用第二种方法。以任何方式更改API会破坏已编写的软件,因此更改它将使您支持两个不同的版本。方法1和方法2之间的变化不是向后兼容的。
我会选择方法2.它没有比1更复杂,并且有可能扩展状态实体。
还有第三种方法。但它明显更复杂(更可扩展)。仅返回状态id并为状态实体检索创建方法。