Qual é o ponto do link rel = "self" em uma API REST?

11

Costumo ver o seguinte em documentos HTML

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

ou assim em JSON

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

ou em XML

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

Então, eu tive algumas perguntas:

  1. Por que incluir este link? Que vantagem isso traz? (Diga-me que há uma razão para isso e não é apenas um talismã de "boas práticas")
  2. Como devo explorar esse link em meus clientes? Quais são os casos de uso desse link?
  3. Quando não devo usar este link? Quando é inútil incluí-lo?
Laurent Bourgault-Roy
fonte
3
"Clique aqui para marcar esta página" seria um caso de uso em que você poderia utilizar a referência "próprio". De maneira mais geral, como o REST é sem estado, o servidor não tem como saber de onde veio a solicitação, portanto, é perfeitamente possível que a página para a qual retorne precise conhecer seu próprio URI.
24414 Roger Roger
Parece que este comentário faria uma resposta muito boa :)
Mike Chamberlain

Respostas:

8

Como é uma referência própria, o cliente saberá que o IRI ( http://example.com/something) é um identificador do recurso sobre o qual a representação se refere.

Pode ser importante quando seu recurso pode ter vários identificadores, por exemplo, http://example.com/users/1e http://example.com/users/1?fields="name"pode identificar o mesmo recurso, mas um GET neles pode resultar em representações diferentes.

Por tipos de mídia como o HAL, você também usa isso para identificar recursos incorporados. Por exemplo:

{
    "nick": "John",
    "_embedded": {
        "cars": {
            "items": [
                //...
            ],
            "_links": {
                "self": {
                    "href": "http://example.com/users/john/cars"
                }
            }
        }
    },
    "_links": {
        "self": {
            "href": "http://example.com/users/john"
        }
    }
}
inf3rno
fonte
O que é IRI? Algum deles en.wikipedia.org/wiki/IRI ?
Marian Paździoch