2015-08-13 1 views
13

Я читал документы jsonapi, и я не могу обернуть вокруг себя, как это практично. В соответствии с документами добавить комментарий к статье комментарий должен быть уже существует.Как создать дочернюю сущность во многих отношениях с 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

Я задал очень похожий вопрос на обсуждении. Jsonapi.org: http://discuss.jsonapi.org/t/how-should-i-create-a-resource-as-a-relationship/ 299/2 –

ответ

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" } 
     } 
    } 
    } 
} 
0

Да, это плохой пример - он указан в разделе «Обновление ко-многим» раздела и принимает комментарий уже существует. В реальной жизни ваш второй пример будет в порядке.

Существует понятие идентификатора client generated, которое передается вместе с данными, но предполагается, что клиент способен создавать глобально уникальный идентификатор, который в случае комментариев клиент, конечно же, не является.

Сервер МОЖЕТ принять идентификатор клиента с запросом создать ресурс. ИД ДОЛЖЕН указываться с ключом id, значение , из которых ДОЛЖНО быть универсально уникальным идентификатором. Клиент ДОЛЖЕН использовать правильно сгенерированный и отформатированный UUID, как описано в RFC 4122 [RFC4122].

+0

Клиент не может создать GUID для комментариев? –

+0

Я вообще говорю, что комментарии являются плохим примером. Без центральной координации или обмена друг с другом дополнительных сообщений распределенные клиенты не могут делать никаких гарантий относительно глобальной уникальности. – xavier

Смежные вопросы