Jaki jest sens linku rel = „self” w interfejsie API REST?

11

Często widzę następujące dokumenty HTML

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

lub tak w JSON

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

lub w formacie XML

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

Więc miałem kilka pytań:

  1. Dlaczego warto dołączyć ten link? Co to za korzyść? (Powiedz mi, że jest ku temu powód i nie jest to tylko talizman „dobrej praktyki”)
  2. Jak powinienem wykorzystać ten link u moich klientów? Jakie są przypadki użycia tego linku?
  3. Kiedy nie powinienem używać tego linku? Kiedy dołączanie go jest bezcelowe?
Laurent Bourgault-Roy
źródło
3
„Kliknij tutaj, aby dodać tę stronę do zakładek” byłoby przypadkiem użycia, w którym można wykorzystać odniesienie do „siebie”. Mówiąc bardziej ogólnie, ponieważ REST jest bezstanowy, serwer nie ma możliwości dowiedzenia się, skąd pochodzi żądanie, więc jest całkiem możliwe, że strona, do której wraca, będzie musiała znać swój własny identyfikator URI.
Roger
Wygląda na to, że ten komentarz byłby całkiem dobrą odpowiedzią :)
Mike Chamberlain

Odpowiedzi:

8

Jest to samodzielne odniesienie, więc klient będzie wiedział, że IRI ( http://example.com/something) jest identyfikatorem zasobu, którego dotyczy reprezentacja.

Może to być ważne, gdy Twój zasób może mieć wiele identyfikatorów, na przykład http://example.com/users/1i http://example.com/users/1?fields="name"może zidentyfikować ten sam zasób, ale GET na nich może spowodować różne reprezentacje.

W przypadku typów multimediów, takich jak HAL, można to również wykorzystać do identyfikacji zasobów osadzonych. Na przykład:

{
    "nick": "John",
    "_embedded": {
        "cars": {
            "items": [
                //...
            ],
            "_links": {
                "self": {
                    "href": "http://example.com/users/john/cars"
                }
            }
        }
    },
    "_links": {
        "self": {
            "href": "http://example.com/users/john"
        }
    }
}
inf3rno
źródło
Co to jest IRI? Każdy z tych en.wikipedia.org/wiki/IRI ?
Marian Paździoch,