À quoi sert le lien rel = "self" dans une API REST?

11

Je vois souvent ce qui suit dans les documents HTML

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

ou comme ça dans JSON

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

ou en XML

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

J'avais donc quelques questions:

  1. Pourquoi inclure ce lien? Quel avantage cela apporte-t-il? (S'il vous plaît, dites-moi qu'il y a une raison à cela et que ce n'est pas seulement un talisman de "bonnes pratiques")
  2. Comment dois-je exploiter ce lien dans mes clients? Quels sont les cas d'utilisation de ce lien?
  3. Quand ne devrais- je pas utiliser ce lien? Quand est-il inutile de l'inclure?
Laurent Bourgault-Roy
la source
3
"Cliquez ici pour mettre cette page en signet" serait un cas d'utilisation où vous pourriez utiliser la référence "self". Plus généralement, parce que REST est sans état, le serveur n'a aucun moyen de savoir d'où vient la demande, il est donc tout à fait possible que la page vers laquelle il retourne ait besoin de connaître son propre URI.
Roger
On dirait que ce commentaire ferait une assez bonne réponse :)
Mike Chamberlain

Réponses:

8

Il s'agit d'une auto-référence, donc le client saura que l'IRI ( http://example.com/something) est un identifiant de la ressource sur laquelle porte la représentation.

Cela peut être important lorsque votre ressource peut avoir plusieurs identifiants, par exemple, http://example.com/users/1et http://example.com/users/1?fields="name"peut identifier la même ressource, mais un GET sur eux peut entraîner des représentations différentes.

Pour les types de supports comme HAL, vous l'utilisez également pour identifier les ressources intégrées. Par exemple:

{
    "nick": "John",
    "_embedded": {
        "cars": {
            "items": [
                //...
            ],
            "_links": {
                "self": {
                    "href": "http://example.com/users/john/cars"
                }
            }
        }
    },
    "_links": {
        "self": {
            "href": "http://example.com/users/john"
        }
    }
}
inf3rno
la source
Qu'est-ce que l'IRI? L'un de ces en.wikipedia.org/wiki/IRI ?
Marian Paździoch