Який сенс посилання rel = "self" в API REST?


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"
        }
    }
}

Що таке IRI? Хтось із цих en.wikipedia.org/wiki/IRI ?
Marian Paździoch

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.