Я разрабатываю 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 (под) объекта? Что означает семантическая сущность self
?
RFC 5988 заявляет:
Контекст ссылки является либо IRI канала, либо идентификатором записи, в зависимости от того, где он появляется
Как я могу интерпретировать это с точки зрения JSON? Является ли каждый новый объект {…}
новым контекстом?
Спасибо!