Nehmen wir an, ich möchte eine RESTful-Schnittstelle erstellen, und ich möchte mit foo
s basierend auf ihren IDs arbeiten. Nichts Neues hier:Best Practices für die Rückgabe der Repräsentation der Ressource, die auch eine Sammlung ist
GET /api/foo1
gibt eine Darstellung (zum Beispiel JSON verwendet wird) vonfoo1
.DELETE /api/foo1
löschtfoo1
.
usw.
Nun lassen Sie mich Ihnen sagen, dass ein „foo“ ist eine Sammlung Typ Sache. Deshalb möchte ich in der Lage sein, eine „Bar“ zu einem „foo“ hinzuzufügen:
PUT /api/foo1/bar3
fügtbar3
zufoo1
.GET /api/foo1/bar3
gibt eine Darstellungfoo1
zurück.DELETE /api/foo1/bar3
entferntbar3
vonfoo1
.DELETE /api/foo1
löschtfoo1
insgesamt.
Jetzt bleibt die Frage: Was macht GET /api/foo1
? Gibt es einfach eine Darstellung von foo1
zurück, wie ich ursprünglich in dieser Frage angenommen habe? Oder gibt es eine Liste von Bars zurück? Oder gibt es eine Darstellung von foo1
zurück, die sowohl eine Beschreibung von foo1
als auch enthält eine Liste aller enthaltenen Bars?
Oder sollte GET /api/foo1
lediglich eine Darstellung foo1
zurück, wie ich zu Beginn angenommen, und erfordern eine PROPFIND
Anfrage der Stäbe innerhalb foo1
(der Ansatz von WebDAV genommen) zur Liste? Aber, um konsistent zu sein, müsste ich nicht alle meine anderen listenartigen Funktionen auf PROPFIND
ändern, was direkt all jenen Tausenden von RESTful-Tutorials widerspricht, die sagen, GET /api/foo1
zu verwenden, um den Inhalt aufzulisten?
Ich mag Ihren Ansatz. In der Tat ist es das gleiche Verhalten, das wirklich orientierten Sprachen implementieren Objekt für Array oder eine Liste Objekte: Array-Objekt Eigenschaften: Länge, Abmessungen, nur lesbar Array Methode GetValue - Liefert eine Element Liste Objekteigenschaften: Kopf, Aktuelle List-Methode GetEnumerator - gibt ein Objekt zurück, das wiederum Elemente zurückgibt –