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?

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

O que é IRI? Algum deles en.wikipedia.org/wiki/IRI ?
Marian Paździoch

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.