В чем смысл ссылки rel = «self» в REST API?

11

Я часто вижу следующее в документах HTML

<link rel="self" href="http://example.com/something">

или как это в JSON

 link: {
     rel="self",
     href="http://example.com/something"
 }

или в XML

 <atom:link rel="self" href="http://example.com/something" />

Итак, у меня было несколько вопросов:

  1. Зачем включать эту ссылку? Какое преимущество это дает? (Пожалуйста, скажите мне, что есть причина, и это не просто талисман "хорошей практики")
  2. Как мне использовать эту ссылку в моих клиентах? Каковы варианты использования этой ссылки?
  3. Когда я не должен использовать эту ссылку? Когда это бессмысленно включать?
Лоран Бурго-Рой
источник
3
«Нажмите здесь, чтобы добавить эту страницу в закладки» - это тот случай, когда вы можете использовать ссылку на «себя». В более общем смысле, поскольку REST не имеет состояния, у сервера нет возможности узнать, откуда поступил запрос, поэтому вполне возможно, что возвращаемая страница должна будет знать свой собственный URI.
Роджер
Похоже, что этот комментарий даст довольно хороший ответ :)
Майк Чемберлен,

Ответы:

8

Это самостоятельная ссылка, поэтому клиент будет знать, что IRI ( http://example.com/something) является идентификатором ресурса, о котором идет представление.

Это может быть важно, когда ваш ресурс может иметь несколько идентификаторов, например, http://example.com/users/1и http://example.com/users/1?fields="name"может идентифицировать один и тот же ресурс, но GET для них может привести к различным представлениям.

Для типов носителей, таких как HAL, вы также используете это для идентификации встроенных ресурсов. Например:

{
    "nick": "John",
    "_embedded": {
        "cars": {
            "items": [
                //...
            ],
            "_links": {
                "self": {
                    "href": "http://example.com/users/john/cars"
                }
            }
        }
    },
    "_links": {
        "self": {
            "href": "http://example.com/users/john"
        }
    }
}
inf3rno
источник
Что такое ИРИ? Любой из тех en.wikipedia.org/wiki/IRI ?
Marian Paździoch