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

在json rest web服务中表示外键关系的标准方法,json,rest,foreign-keys,entity-relationship,Json,Rest,Foreign Keys,Entity Relationship,我有一个与一个国家有一对多关系的葡萄酒实体(一个国家-许多葡萄酒) 我可以想出两种方法在json web服务中表示这一点: 一种是把整个国家都包括在一份报告中 { id: 76, code: "FR", name: "France" } { id: 79, name: "Bordeaux", country: { id: 76, code: "FR", name: "France" }, year: "2005" } 另

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

我可以想出两种方法在json web服务中表示这一点:

一种是把整个国家都包括在一份报告中

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

{
  id: 79,
  name: "Bordeaux",
  country: {
      id: 76,
      code: "FR",
      name: "France"
    },
  year: "2005"
}
另一种方法是使用前缀将每个国家/地区的属性包含到同一级别

{
  id: 79,
  name: "Bordeaux",
  countryId: 76,
  countrCode: "FR",
  countryName: "France"
  year: "2005"
}
在任何情况下,当更新或创建新葡萄酒时,我只保存国家id,不允许从葡萄酒的端点修改国家

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

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


ps:我不是想就解决方案的“RESTfull”展开辩论,只是想寻找一种智能的、简单的方法来处理这种关系……

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

MongoDB强化了这一观点。在MongoDB中,您将所有内容存储为JSon,“FKs”包含在同一文档中。如果您需要FKs,那么我认为您不需要mongo,也不需要JSon


BTW,如果你总是向这个国家展示,在你的情况下总是两个请求Ac/P>< P>是没有意义的,国家足够小,可以考虑每次都嵌套它。不过,情况并非总是如此,我在处理这件事上也没有找到标准

我使用自定义引用类型完成了此操作:

{
    "id": 79,
    "name": "Bordeaux",
    "country": {
        "ref": {
            "id": 76,
            "uri": "/country/76"
        }
    },
    "year": "2005" }

还有一些有用的想法。

Thx opensas-实际上缺少了很多。我实现了一些类似的东西,但是没有ref,这里是它在openshift:,和git repo:,那么ref是必要的吗?我在你的例子中没有看到任何外来引用,只有嵌套对象和自引用我只是实验性地实现了它,在idea实体中,看到url属性,但是我们的想法是要有嵌套的对象,每个对象都有一个url属性。这个答案忽略了一个事实,即我们所说的RESTful web服务使用JSON序列化,因此需要表示对象之间的关系。@DanielWatkins+1同意,数据对象的JSON表示和RDBMs之间没有阻抗不匹配