RESTful:何时嵌套JSON?

时间:2012-09-06 14:35:51

标签: database json api rest

假设我正在构建一个带有调用的API,该调用返回一组城市,每个城市都与一个州有关系。一个州有很多城市,但一个城市只有一个州。

我可以想象将这种关系弄平,并模糊这些数据的基础结构,

{ cities : [
    { id: 1,
      name: "Los Angeles",
      state: "CA" }
]}

或者我可以想象构建JSON,以便城市和州之间的关系显而易见,

{ cities : [
    { id: 1,
      name: "Los Angeles",
      state: { id: 1,
               name: "CA" }
]}

截至目前,API的消费者只需要知道州的名称。他不需要知道自己的身份证或获取有关州的更多信息的方法。以任何一种方式构造JSON的优缺点是什么?

2 个答案:

答案 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并为状态实体检索创建方法。