JSONAPI - 链接资源中self和related之间的差异

时间:2015-09-11 11:19:36

标签: json-api

为什么self and related引用在以下JSONAPI资源中有所不同?他们不是指向相同的资源吗?转到/articles/1/relationships/tags/articles/1/tags之间有什么区别?

{
  "links": {
    "self": "/articles/1/relationships/tags",
    "related": "/articles/1/tags"
  },
  "data": [
    { "type": "tags", "id": "2" },
    { "type": "tags", "id": "3" }
  ]
}

2 个答案:

答案 0 :(得分:11)

你可以在这里阅读:https://github.com/json-api/json-api/issues/508

基本上,/articles/1/relationships/tags响应将是表示articlestags之间关系的对象。响应可能是这样的(你在问题中提出的):

{
  "links": {
    "self": "/articles/1/relationships/tags",
    "related": "/articles/1/tags"
  },
  "data": [
    { "type": "tags", "id": "2" },
    { "type": "tags", "id": "3" }
  ]
}

此响应仅提供必要的数据(在主数据属性 - 数据中)来操纵关系,而不是与关系相关的资源。话虽如此,如果您想要创建新关系,添加新文章(基本上更新关系)到文章,阅读哪些标签属于文章(您只需要在服务器上搜索它们的身份)或删除文章标签。

另一方面,调用/articles/1/relationships/tags将使用主数据作为主数据回复其所有其他属性(文章关系链接以及其他顶级属性,例如包含强调文字链接和/或 jsonapi )。

答案 1 :(得分:2)

他们是不同的。这是我项目中的一个例子。

试试Get http://localhost:3000/phone-numbers/1/relationships/contact你会得到这样的回复:

{
  "links": {
    "self": "http://localhost:3000/phone-numbers/1/relationships/contact",
    "related": "http://localhost:3000/phone-numbers/1/contact"
  },
  "data": {
    "type": "contacts",
    "id": "1"
  }
}

没有获取可能要检索的attributesrelationships

然后 试试Get http://localhost:3000/phone-numbers/1/contact你会得到这样的回复:

{
  "data": {
    "id": "1",
    "type": "contacts",
    "links": {
      "self": "http://localhost:3000/contacts/1"
    },
    "attributes": {
      "name-first": "John",
      "name-last": "Doe",
      "email": "john.doe@boring.test",
      "twitter": null
    },
    "relationships": {
      "phone-numbers": {
        "links": {
          "self": "http://localhost:3000/contacts/1/relationships/phone-numbers",
          "related": "http://localhost:3000/contacts/1/phone-numbers"
        }
      }
    }
  }
}

您可以看到自己检索到所需的所有信息,包括attributesrelationships

但是你应该知道relationships可以用于某些目的。请阅读http://jsonapi.org/format/#crud-updating-to-one-relationships作为样本。