2015-09-11 7 views
8

Warum sind die self and related Referenzen in der folgenden JSONAPI-Ressource unterschiedlich? Zeigen sie nicht auf dieselbe Ressource? Was ist der Unterschied zwischen /articles/1/relationships/tags und /articles/1/tags?JSONAPI - Unterschied zwischen self und related in einer Linksressource

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

Antwort

8

Das können Sie hier lesen: https://github.com/json-api/json-api/issues/508.

Grundsätzlich wird mit /articles/1/relationships/tags Antwort wird Objekt, das die Beziehung zwischen articles und tags darstellt. Die Antwort könnte so etwas wie diese (was Sie in Ihrer Frage gestellt):

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

Diese Antwort nur die notwendigen Daten gibt (in dem Primärdatenattribut - Daten) die Beziehung und nicht die Ressourcen mit Beziehung verbunden zu manipulieren . Davon abgesehen, rufen Sie /articles/1/relationships/tags wenn Sie wollen neue Beziehung erstellen, fügen einen neuen Tag (im Grunde Aktualisierung Beziehung) zu Artikeln lasen die Tags zu Artikeln gehören (nur Identität brauchen, um sie auf der Suche Server) oder löschen Artikel Tags.

Auf der anderen Seite, /articles/1/tags Aufruf mit Tags als Primärdaten mit allen anderen Eigenschaften reagieren, die sie haben (Artikel, Beziehungen, Links und andere Top-Level-Attribute wie zum umfassen, hervorgehoben Text, Links und/oder jsonapi).

+0

Müssen Sie eine Payload an die Self-Link senden, wenn Sie versuchen, eine Beziehung zu erstellen oder zu löschen? Was bedeutet das auch: "lese, welche Tags zum Artikel gehören (du brauchst nur die Identität, um sie auf dem Server zu suchen)" Was wäre der Link, um die Tags zu lesen, die zum Artikel gehören? Ist das nicht dasselbe wie root/articles/1/tags zu besuchen? – Jwan622

0

Sie sind anders. Hier ist ein Beispiel aus meinem Projekt.

Get http://localhost:3000/phone-numbers/1/relationships/contact Versuchen Sie Antwort wie diese: { "links": { "self": "http://localhost:3000/phone-numbers/1/relationships/contact", "related": "http://localhost:3000/phone-numbers/1/contact" }, "data": { "type": "contacts", "id": "1" } } Sie nicht die attributes und relationships erhalten, die wahrscheinlich ist, dass Sie abrufen möchten.

Dann Versuchen Get http://localhost:3000/phone-numbers/1/contact Sie Antwort wie diese bekommen: { "data": { "id": "1", "type": "contacts", "links": { "self": "http://localhost:3000/contacts/1" }, "attributes": { "name-first": "John", "name-last": "Doe", "email": "[email protected]", "twitter": null }, "relationships": { "phone-numbers": { "links": { "self": "http://localhost:3000/contacts/1/relationships/phone-numbers", "related": "http://localhost:3000/contacts/1/phone-numbers" } } } } } Sie können sehen Sie alle Informationen abgerufen Sie wollen, die attributes und relationships einschließlich.

Aber Sie sollten wissen, dass relationships für einen bestimmten Zweck verwendet werden kann. Bitte lesen Sie http://jsonapi.org/format/#crud-updating-to-one-relationships als Beispiel.

Verwandte Themen