Was ist der Punkt von link rel = "self" in einer REST-API?

11

In HTML-Dokumenten sehe ich oft Folgendes

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

oder so in JSON

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

oder in XML

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

Also hatte ich einige Fragen:

  1. Warum diesen Link einfügen? Welchen Vorteil bringt es? (Bitte sagen Sie mir, dass es einen Grund dafür gibt und dass es sich nicht nur um einen Talisman mit "guter Praxis" handelt.)
  2. Wie soll ich diesen Link in meinen Kunden nutzen? Was ist der Anwendungsfall für diesen Link?
  3. Wann sollte ich diesen Link nicht verwenden? Wann ist es sinnlos, es aufzunehmen?
Laurent Bourgault-Roy
quelle
3
"Klicken Sie hier, um diese Seite mit einem Lesezeichen zu versehen" wäre ein Anwendungsfall, in dem Sie die Referenz "Selbst" verwenden könnten. Da REST zustandslos ist, kann der Server im Allgemeinen nicht wissen, woher die Anforderung stammt. Daher ist es durchaus möglich, dass die Seite, zu der er zurückkehrt, einen eigenen URI kennt.
Roger
Scheint, als würde dieser Kommentar eine ziemlich gute Antwort geben :)
Mike Chamberlain

Antworten:

8

Da es sich um eine Selbstreferenz handelt, weiß der Client, dass IRI ( http://example.com/something) eine Kennung der Ressource ist, um die es in der Darstellung geht.

Es kann wichtig sein, wenn Ihre Ressource beispielsweise mehrere Bezeichner haben http://example.com/users/1und http://example.com/users/1?fields="name"dieselbe Ressource identifizieren kann, ein GET auf ihnen jedoch zu unterschiedlichen Darstellungen führen kann.

Bei Medientypen wie HAL verwenden Sie dies auch, um eingebettete Ressourcen zu identifizieren. Zum Beispiel:

{
    "nick": "John",
    "_embedded": {
        "cars": {
            "items": [
                //...
            ],
            "_links": {
                "self": {
                    "href": "http://example.com/users/john/cars"
                }
            }
        }
    },
    "_links": {
        "self": {
            "href": "http://example.com/users/john"
        }
    }
}
inf3rno
quelle
Was ist IRI? Irgendwelche von denen en.wikipedia.org/wiki/IRI ?
Marian Paździoch