在json rest Web服务中表示外键关系的标准方法

ope*_*sas 7 rest json entity-relationship foreign-keys

我有一个葡萄酒实体,与一对多关系的国家有关(一个国家 - 许多葡萄酒)

我可以想到在json Web服务中表示这两种方式:

一个是将整个国家包括在一个json中

{
  id: 76,
  code: "FR",
  name: "France"
}

{
  id: 79,
  name: "Bordeaux",
  country: {
      id: 76,
      code: "FR",
      name: "France"
    },
  year: "2005"
}
Run Code Online (Sandbox Code Playgroud)

另一个是将每个国家/地区属性包括在同一级别,并带有前缀

{
  id: 79,
  name: "Bordeaux",
  countryId: 76,
  countrCode: "FR",
  countryName: "France"
  year: "2005"
}
Run Code Online (Sandbox Code Playgroud)

无论如何,在更新或创建新葡萄酒时,我只会保存国家ID,我不允许从葡萄酒的终点修改国家/地区

第二种方法更容易实现(我会在db上有一个连接视图,而序列化器只会将每个字段转换为json),但我认为第一种方法更优雅

只是想知道这种情况是否有任何标准,如果没有更常见的方法......

ps:我不是要开始讨论解决方案的"restfullness",只是寻找一种简单的方法来处理这种关系...

Roy*_*ove 5

在你的情况下,国家小到足以考虑每次都嵌套它.但情况并非总是如此,并且我没有找到处理此问题的标准.

我用自定义引用类型完成了这个:

{
    "id": 79,
    "name": "Bordeaux",
    "country": {
        "ref": {
            "id": 76,
            "uri": "/country/76"
        }
    },
    "year": "2005" }
Run Code Online (Sandbox Code Playgroud)

这里也有一些有用的想法.


mgo*_*nto -5

JSon 没有外键。这与 RDBMS 相关。在我看来,JSon 应该显示嵌套在其自身中的所有内容。

MongoDB 强化了这一观点。在 MongoDB 中,您将所有内容存储为 JSON,并且“FK”包含在同一文档中。在我看来,如果你需要 FK,那么你就不需要 mongo,也不需要 JSon。

顺便说一句,如果你总是向国家展示,那么总是提出两个请求是没有意义的

  • 这个答案忽略了这样一个事实:我们正在讨论使用 JSON 进行序列化的 RESTful Web 服务,因此需要表示对象之间的关系。 (7认同)