Je suis en train de concevoir une API RESTful basée sur des représentations JSON. Afin de respecter HATEOAS, j'utilise largement les liens entre les ressources. Par conséquent, j'ai suivi cette suggestion pour sérialiser les liens d'une manière très similaire aux liens ATOM.
Maintenant, j'ai parfois des problèmes pour identifier le type de relation de lien correct. Lorsqu'une ressource contient un lien vers elle-même, le type de relation self
est évidente. La situation devient plus complexe lorsque les ressources sont des collections et des agrégations de sous-ressources, ou qu'elles contiennent de nombreux liens vers des ressources connexes.
Prenons l'exemple d'un article de blog et imaginons une ressource qui renvoie un aperçu de l'article de blog - y compris l'auteur, les balises et les commentaires de cet article de blog. Il est évident que cette ressource contient de nombreuses sous-ressources et qu'elle doit fournir des liens distincts vers ces dernières :
{
"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"
}
}
]
}
}
Quelles sont donc les relations appropriées pour les liens donnés ? Je sais qu'il existe des types de relations tels que tag
mais toutes mes ressources ne correspondent pas aux types de relations existants. Ou est-il possible d'utiliser self
lorsqu'il se réfère à l'auteur/l'étiquette/le commentaire, parce qu'il se rapporte au contexte du (sous-)objet JSON qui l'entoure ? Quelle est l'entité sémantique self
fait référence ?
Le RFC 5988 stipule que
Le contexte du lien est soit un IRI de flux, soit un ID d'entrée, selon l'endroit où il apparaît
Comment puis-je interpréter cela en termes de JSON ? Chaque nouvel objet est-il {…}
un nouveau contexte ?
Merci de votre attention !