Verknüpfungsbeziehungen in JSON-Darstellungen
Ich bin entwerfen eines RESTful-API auf Basis der JSON-Darstellungen. Um das zu erfüllen, HATEOAS, ich links zwischen Ressourcen intensiv. Deshalb folgte ich dieser Vorschlag zum serialisieren links in Art und Weise sehr ähnlich zu ATOM links.
Nun habe ich manchmal Schwierigkeiten, den richtigen link-relation geben. Wenn eine Ressource enthält einen Verweis auf sich selbst, die self
Bezug ist offensichtlich. Es wird immer komplizierter, wenn die Ressourcen-Sammlungen und Anhäufungen von sub-Ressourcen, oder Sie enthalten viele links zu verwandten Ressourcen.
Nehmen einen blog-post als Beispiel, und denken Sie an eine Ressource, liefert einen snapshot der blog-post – inklusive dem Autor, tags und Kommentare zu diesem blog-post.
Offensichtlich, diese Ressource enthält viele subresources und sollte natürlich bietet auch separate links für Sie:
{
"blogpost":{
"link":{
"rel":"self",
"href":"http://blog/post/4711"
},
"author":{
"name":"Bob",
"link":{
"rel":"???",
"href":"http://author/uri"
}
},
"title":"foobar",
"content":"A long article here…",
"comments":[
{
"comment":"great article",
"link":{
"rel":"???",
"href":"http://blog/post/4711/comment/1"
},
"author":{
"name":"John Doe",
"link":{
"rel":"???",
"href":"http://author/uri"
}
}
}
],
"tags":[
{
"value":"foo",
"link":{
"rel":"???",
"href":"http://blog/post/4711/tag/foo"
}
}
]
}
}
Also, was sind die entsprechenden Beziehungen für die angegebenen links? Ich weiß, dass es gegenüber Typen wie tag
aber nicht alle meine Ressourcen entsprechen den vorhandenen relationstypen. Oder ist es in Ordnung, zu verwenden self
bei der Bezugnahme auf die Autor/Tags/kommentieren, denn es bezieht sich auf den Kontext des umgebenden JSON (sub-)Objekt? Was ist die semantische Einheit self
bezieht?
RFC 5988 Staaten:
Kontext der link ist entweder ein Futtermittel-IRI oder eine Eintrags-ID, abhängig davon, wo es erscheint
Wie kann ich interpretieren diese in Bezug auf JSON? Ist jedes neue Objekt {…}
einen neuen Kontext?
Dank!
InformationsquelleAutor der Frage b_erb | 2011-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist eine gute Frage. Wenn Sie sich das Beispiel für Hal Sie werden sehen, dass die rels sind definiert im Kontext der sub-Ressource.
Ich kenne keine definitive guide auf, wenn die rel ist in Bezug auf die Ressource als ganzes oder enthaltene sub-Ressource.
Die einzige zusätzliche information, die ich zeigen können, Sie ist der Anker parameter in RFC5988, die Ihnen erlaubt, neu zu definieren, den Kontext IRI entweder ein fragment oder eine komplett neue URI.
Ideal, Ihr mediatype sollte festgehalten werden, ob der Kontext IRI ist für verschachtelte Ressourcen, oder ob der Kontext IRI muss explizit geändert werden. Das wäre ein weiterer Vorteil, der mit einem media-type wie application/vnd.hal+json statt plain old application/json, wie die Hal-spec-Staaten:
InformationsquelleAutor der Antwort Darrel Miller
LSON-LD
Können Sie vielleicht einen Blick auf JSON-LD (JavaScript Object Notation für Linked Data. Wie es aussieht ist komplizierter als HAL aber Sie können mehr tun mit ihm.
JSON-LD ist standardisiert innerhalb des W3C, hier ist der Vorschlag Empfehlung.
Auch
Sorry, ich habe keine Zeit, um mit einem Beispiel..
InformationsquelleAutor der Antwort Yves M.
Es ist ein bisschen spät diese Frage zu beantworten, aber für die Zukunft, das ist, wie ich dieses problem lösen :
wenn man darüber nachdenkt, Kommentare, tags, etc sind alle eindeutigen Ressourcen im Zusammenhang mit deinem post ... warum nicht, dann machen Sie alle, was Sie sind .. links ! Sie speichern sogar auf die Größe Ihrer Antwort 😉
InformationsquelleAutor der Antwort Jeffrey Hilaire