¿Cuál es el punto de enlace rel = "self" en una API REST?

11

A menudo veo lo siguiente en documentos HTML

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

o así en JSON

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

o en XML

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

Entonces tuve algunas preguntas:

  1. ¿Por qué incluir este enlace? ¿Qué ventaja trae? (Por favor, dígame que hay una razón para ello y no es solo un talismán de "buenas prácticas")
  2. ¿Cómo debo explotar este enlace en mis clientes? ¿Cuáles son los casos de uso de este enlace?
  3. ¿Cuándo no debería usar este enlace? ¿Cuándo no tiene sentido incluirlo?
Laurent Bourgault-Roy
fuente
3
"Haga clic aquí para marcar esta página" sería un caso de uso en el que podría utilizar la referencia "propia". En términos más generales, dado que REST no tiene estado, el servidor no tiene forma de saber de dónde vino la solicitud, por lo que es muy posible que la página a la que regresa necesite conocer su propio URI.
Roger
Parece que este comentario sería una buena respuesta :)
Mike Chamberlain

Respuestas:

8

Es una referencia propia, por lo que el cliente sabrá que el IRI ( http://example.com/something) es un identificador del recurso del que trata la representación.

Puede ser importante cuando su recurso puede tener múltiples identificadores, por ejemplo, http://example.com/users/1y http://example.com/users/1?fields="name"puede identificar el mismo recurso, pero un GET en ellos puede dar lugar a diferentes representaciones.

Por tipos de medios como HAL, usted también usa esto para identificar recursos integrados. Por ejemplo:

{
    "nick": "John",
    "_embedded": {
        "cars": {
            "items": [
                //...
            ],
            "_links": {
                "self": {
                    "href": "http://example.com/users/john/cars"
                }
            }
        }
    },
    "_links": {
        "self": {
            "href": "http://example.com/users/john"
        }
    }
}
inf3rno
fuente
¿Qué es el IRI? ¿Alguno de esos en.wikipedia.org/wiki/IRI ?
Marian Paździoch