Ich wurde gebeten, eine RESTful API zu entwerfen und zu implementieren, und habe Best Practices erforscht, aber bisher nur ein wolliges Konzept über Ressourcendarstellungen. Die meisten verfügbaren Beispiele, die ich gefunden habe, scheinen sich stark auf API-Clients zu konzentrieren, die verbundene Strukturen mithilfe einer Reihe von GETs durchlaufen.REST-Ressourcendarstellung mit Links, kompatibel mit PUT und GET
Ich habe sah:
http://www.restapitutorial.com/media/RESTful_Best_Practices-v1_1.pdf
http://www.youtube.com/watch?v=HW9wWZHWhnI
unter anderem Online-Ressourcen (Ich bin zu 2 Links beschränkt leider kann sie nicht alle aufzählen). Sie sind alle großartig, aber nicht wirklich meine Design-Frage.
Die meisten der Best-Practice-Dokumente legen nahe, zwei Dinge zu mir, dass etwas in Konflikt aussehen:
1) REST-Service-Ressourcen Datenbeziehungen als Verbindungen zwischen
2) Einem "PUT" Anfrage von a darstellen sollte Der Client sollte eine vollständige Repräsentation sein, die der Darstellung auf dem Server entspricht.
Das Problem aus meiner Sicht ist, dass die Links und vielleicht einige andere Eigenschaften in einer typischen Ressource schreibgeschützt sind und daher nicht aktualisiert werden können. Der Server erwartet, dass sie unverändert bleiben und gibt einen Fehler zurück, wenn der Client denkt, dass der Client versucht, sie zu aktualisieren. Wenn ich mir eine typische Ressource anschaue, die in JSON vertreten ist, handelt es sich bei der Mehrzahl um Daten, die logisch nicht ersetzt werden können/sollten. Z.B.
{
"link": { "rel":"self", "href":"http://example/project/12345" },
"team": {
"link": { "rel":"self", "href":"http://example/project/12345/team" },
"title": "The project team"
},
"title": "The Big Project"
}
hier bestenfalls nur die beiden Titeltexte an einen Client auf dieser Ressource (Team Mitgliedschaft sein könnte über das Team Link änderbaren) wäre beschreibbar.
Also sollte ich verlangen, dass ein PUT enthält alle "Link" -Elemente genau wie sie sind, die rein logisch und schreibgeschützt sind (beachten Sie im Beispiel, das Team kann nicht neu verknüpft werden, wie die Ressource definiert es als Team für das Projekt - in diesem Fall könnte das geändert werden, aber für viele Ressourcenarten mit strengerem Containerschiff gilt dies nicht)?
Gibt es Standardmuster oder Antimuster für die Darstellung von Ressourcen in REST mit vielen Links? Ich werde nicht nach einer bestimmten REST-Variante wie HATEOAS gefragt, obwohl meine Neigung darin besteht, theoretische "Korrektheit" anzustreben, wo immer möglich. Mit anderen Worten, wenn "offizieller" REST zu erwarten wäre, dass die Kunden die gesamte Ressource, die Links und alles zusammenstellen, dann ist es wahrscheinlich das, was ich tun werde.
Einige Beispiele von reellen komplexen REST-Ressourcen, die GET und PUT unterstützen und daher mit diesem Problem arbeiten müssen, wären sehr willkommen. Wenn ich suche, bekomme ich viele Meinungen und viele Beispiele, die zeigen, wie schön GET funktioniert. . . aber bis jetzt habe ich kein gut dokumentiertes Beispiel gesehen, das eine PUT zu etwas anderem als einer trivialen Leaf-Ressource zeigt (d. h. eine, die keine Links enthält, außer vielleicht einer Selbstreferenz).
Vielen Dank. Mein mit Stiften versehenes Design enthält einen "Eigenschaften" -Abschnitt, der der Idee des "Körper" -Mitglieds ziemlich ähnlich sieht. Ich überlege auch, solche Dinge in ihre eigenen Blatt-Ressourcen zu brechen, die meinem Entwurf 5 oder 6 Ressourcentypen hinzufügen würden (schlecht), aber PUT-Methoden erheblich vereinfachen (gut) –