Я разрабатываю RESTful API на основе представлений JSON. Чтобы соответствовать HATEOAS, я широко использую ссылки между ресурсами. Поэтому я последовал за этим предложением для сериализации ссылок, очень похожих на ссылки ATOM.
Теперь у меня иногда возникают проблемы с определением правильного типа отношения ссылки. Когда ресурс содержит ссылку на себя, отношение self
очевидно. Он становится более сложным, когда ресурсы представляют собой коллекции и агрегации под-ресурсов или содержат много ссылок на связанные ресурсы.
Возьмите сообщение в блоге в качестве примера и подумайте о ресурсе, который возвращает моментальный снимок блога, включая автора, теги и комментарии этого сообщения в блоге. Очевидно, что этот ресурс содержит много подресурсов и, разумеется, также предоставляет отдельные ссылки на них:
{
"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"
}
}
]
}
}
Итак, каковы подходящие отношения для данных ссылок? Я знаю, что существуют типы отношений, такие как tag
, но не все мои ресурсы соответствуют существующим типам отношений. Или можно использовать self
при обращении к автору/тегу/комментарию, потому что он относится к контексту охватывающего объекта JSON (sub-)? Что такое семантический объект self
относится к?
RFC 5988 заявляет:
Контекстом ссылки является либо IRI подачи, либо идентификатор записи, в зависимости от того, где он отображается.
Как я могу интерпретировать это с точки зрения JSON? Является ли каждый новый объект {…}
новым контекстом?
Спасибо!