Open
Description
Lets assume we have entity Book
and Chapter
. We will treat this as a 1-1 relation, but this also applies to 1-n relations.
`
(i will use yaml serialization for comments)
We asume that we have 1 book and 2 chapters already and that one chapter is related to book (1-1 remember).
"@id": /books/great-book
"@type": type:Book
title: A Great Book
content: /chapters/first-chapter
"@id": /chapters/first-chapter
"@type": type:Chapter
headline: The Beginning
"@id": /chapters/second-chapter
"@type": type:Chapter
headline: Continue
The context
type: http://example.com/
title: http://example.com/title
content:
"@id": http://example.com/content
"@type": @id
headline: http://example.com/headline
There are actually several different possibilities when updating the Book
with an embedded update.
We do a PUT /books/great-book
with the following documents
"@id": /books/great-book # can be infered by endpoint
"@type": Book # can be infered by endpoint
content:
"@id": /chapters/first-chapter
headline: Lets Start
Meaning:
- Relate
/books/great-book
withcontent
of/chapters/first-chapter
. This is a noop - Update
/chapter/first-chapter
withheadline
ofLets Start
(old value wasThe Beginning
)
"@id": /books/great-book # can be infered by endpoint
"@type": Book # can be infered by endpoint
title: A Great Book
content:
"@id": /chapters/second-chapter
headline: Going On
Meaning:
- Relate
/books/great-book
withcontent
of/chapters/second-chapter
. - Update
/chapters/second-chapter
withheadline
ofGoing On
"@id": /books/great-book # can be infered by endpoint
"@type": Book # can be infered by endpoint
title: A Great Book
content:
"@id": /chapters/new-chapter
headline: Finish
Meaning:
- Relate
/books/great-book
withcontent
of/chapters/new-chapter
. But this chapter doesnt exist. Should it be created, or should the denormalization fail? (failing results in 400, 404 or 409 depending on preference) - If we created the
/chapters/new-chapter
we set itsheadline
toFinish
"@id": /books/great-book # can be infered by endpoint
"@type": Book # can be infered by endpoint
content:
headline: Lets start
Meaning:
- the given chapter is a blank node and gets a blank id of
_:1
- Obviously there is no chapter
_:1
. we have 3 possibilities- Create a new chapter (and update it)
- Fail (400, 404, 409)
- Use whatever chapter is currently set as
content
of the book and update this (fails if there is no currentcontent
)
While the first 2 examples are pretty straight forward, the last two can get wonky.
@soyuka Whats your opinion on this?
Metadata
Metadata
Assignees
Labels
No labels