Связь связей в представлениях JSON

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

Спасибо!

48
задан RAM 31 July 2019 в 12:54
поделиться