2015-08-13 3 views
13

Ich habe durch jsonapi Dokumente gelesen und ich kann nicht meinen Kopf darüber, wie das praktisch ist. Laut den Dokumenten, die einen Kommentar zu einem Artikel hinzufügen, muss der Kommentar bereits existieren.So erstellen Sie eine untergeordnete Entität in Beziehung zu-viele mit 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" } 
    ] 
} 

Ist das nur ein schlechtes Beispiel oder tut die Spezifikation wirklich wollen Sie eine Anforderung zur Ausgabe eines Kommentar zu erstellen, die nicht zu einer Einheit verbunden ist, bevor Sie die oben Anforderung ausgebende es für insgesamt beziehen 2 Anfragen?

Es scheint, dass Sie würde eher eine Anfrage wie folgt ausgegeben werden soll:

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

oder besser noch:

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

Ich habe eine sehr ähnliche Frage auf discuss.jsonapi.org gestellt: http://discuss.jsonapi.org/t/how-should-i-create-a-resource-as-a-relationship/ 299/2 –

Antwort

1

Nach JSONAPI's guide on creating resources die folgende Ressourcenerstellung Anforderung, die aussieht sehr ähnlich zu OPs erstem Vorschlag, ist eine gültige Anfrage.

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

Ja, es ist ein schlechtes Beispiel - steht unter der „Aktualisierung zu-viele Beziehungen“ aufgeführt Abschnitt und nimmt der Kommentar bereits vorhanden ist. Im wirklichen Leben wäre dein zweites Beispiel in Ordnung.

Es gibt eine Idee einer client generated ID, die neben Daten übergeben wird, aber davon ausgeht, dass der Client in der Lage ist, eine global eindeutige ID zu erzeugen, was im Fall von Kommentaren sicherlich kein Client ist.

Ein Server kann eine vom Kunden generierte ID zusammen mit einer Anforderung an eine Ressource erstellen. Eine ID muss mit einem ID-Schlüssel angegeben werden, wobei der Wert ein universell eindeutiger Bezeichner sein muss. Der Client sollte verwenden eine ordnungsgemäß generierte und formatierte UUID wie in RFC 4122 [RFC4122] beschrieben.

+0

Ein Client kann keine GUID für Kommentare erstellen? –

+0

Ich spreche im Allgemeinen Kommentare zu einem schlechten Beispiel. Ohne eine zentrale Koordination oder den Austausch zusätzlicher Nachrichten untereinander können verteilte Clients keine Garantien für die globale Eindeutigkeit geben. – xavier

Verwandte Themen