为什么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" }
]
}
答案 0 :(得分:11)
你可以在这里阅读:https://github.com/json-api/json-api/issues/508。
基本上,/articles/1/relationships/tags
响应将是表示articles
和tags
之间关系的对象。响应可能是这样的(你在问题中提出的):
{
"links": {
"self": "/articles/1/relationships/tags",
"related": "/articles/1/tags"
},
"data": [
{ "type": "tags", "id": "2" },
{ "type": "tags", "id": "3" }
]
}
此响应仅提供必要的数据(在主数据属性 - 数据中)来操纵关系,而不是与关系相关的资源。话虽如此,如果您想要创建新关系,添加新文章(基本上更新关系)到文章,1}},< strong>阅读哪些标签属于文章(您只需要在服务器上搜索它们的身份)或删除文章标签。
另一方面,调用/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"
}
}
您没有获取可能要检索的attributes
和relationships
。
然后
试试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"
}
}
}
}
}
您可以看到自己检索到所需的所有信息,包括attributes
和relationships
。
但是你应该知道relationships
可以用于某些目的。请阅读http://jsonapi.org/format/#crud-updating-to-one-relationships作为样本。