Я разрабатываю 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? Является ли каждый новый объект {…}
новым контекстом?
Спасибо!