我一直在阅读jsonapi的文档,但我无法理解这是如何实用的。根据向文章添加评论的文档,评论必须已存在。
POST /articles/1/relationships/comments HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": [
{ "type": "comments", "id": "123" }
]
}
这只是一个糟糕的例子,或者规范是否真的希望您发出请求以创建与实体无关的注释,然后再发出上述请求以将其关联起来共有2个请求?
您似乎更希望发出这样的请求:
POST /comments HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": {
"type": "comments",
"attributes": {
"body": "blah blah blah"
},
"relationships": {
"article": {
"data": { "type": "articles", "id": "45" }
}
}
}
}
或更好:
POST /articles/45/relationships/comments HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": [
{
"type": "comments",
"attributes": {
"body": "blah blah blah"
}
}
]
}
答案 0 :(得分:1)
根据JSONAPI's guide on creating resources,以下资源创建请求与OP的第一个建议非常相似,是有效请求。
POST /photos HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": {
"type": "photos",
"attributes": {
"title": "Ember Hamster",
"src": "http://example.com/images/productivity.png"
},
"relationships": {
"photographer": {
"data": { "type": "people", "id": "9" }
}
}
}
}
答案 1 :(得分:0)
是的,这是一个糟糕的例子 - 它被列在"更新To-Many关系"部分并假设评论已存在。在现实生活中,你的第二个例子没问题。
有一个client generated id的概念与数据一起传递,但是假设客户端能够生成全局唯一的id,在注释的情况下,客户端肯定不会。
服务器可以接受客户端生成的ID以及请求 创建资源。必须使用id键指定ID,即值 其中必须是一个普遍唯一的标识符。客户应该 使用RFC 4122中描述的正确生成和格式化的UUID [RFC4122]。