Ich bin gerade dabei, eine REST-API zu erstellen, und derzeit tritt das folgende Problem auf:
Fooist die erste Ressource. CRUD-Operationen können über den/foo/URI angewendet werden .Barist die zweite Ressource. CRUD-Operationen können über den/bar/URI angewendet werden .- Jeder
Fooist mit Null oder Eins verbundenBar. Der Grund, warum ich nichtBarals Unterressource von behandle,Fooist, dass dieselbeBarInstanz von mehreren geteilt werden kannFoo. Also dachte ich, es ist besser, statt über eine unabhängige URI darauf zuzugreifen/foo/[id]/bar.
Mein Problem ist, dass in einer erheblichen Anzahl von Fällen auch Clients, die nach einer FooInstanz fragen, an der zugehörigen BarInstanz interessiert sind . Derzeit bedeutet dies, dass sie zwei Abfragen anstelle von einer ausführen müssen. Ich möchte eine Methode vorstellen, mit der beide Objekte mit einer einzigen Abfrage abgerufen werden können, aber ich weiß nicht, wie ich die API dafür modellieren soll. Was ich mir bisher ausgedacht habe:
- Ich könnte einen ähnlichen Abfrageparameter einführen :
/foo/[id]?include_bar=true. Das Problem bei diesem Ansatz besteht darin, dass die Ressourcendarstellung (z. B. die JSON-Struktur) der Antwort anders aussehen muss (z. B. ein Container wie z. B.{ foo: ..., bar: ... }nur ein serialisierterFoo), wodurch derFooRessourcenendpunkt "heterogen" wird. Ich denke nicht, dass das eine gute Sache ist. Bei der Abfrage/foosollten Clients unabhängig von den Abfrageparametern immer dieselbe Ressourcendarstellung (Struktur) erhalten. - Eine andere Idee ist die Einführung eines neuen schreibgeschützten Endpunkts, z
/fooandbar/[foo-id]. In diesem Fall ist es kein Problem, eine Darstellung wie zurückzugeben{ foo: ..., bar: ... }, da es sich dann nur um die "offizielle" Darstellung derfooandbarRessource handelt. Ich weiß jedoch nicht, ob ein solcher Helfer-Endpunkt wirklich RESTful ist (deshalb habe ich im Titel der Frage "can" geschrieben. Natürlich ist es technisch möglich, aber ich weiß nicht, ob es eine gute Idee ist).
Was denkst du? Gibt es noch andere Möglichkeiten?
Barkann nicht existieren, ohne mit a verbunden zu sein Foo. Wie ich oben geschrieben habe, ist es jedoch möglich, dass mehrere Foos dasselbe teilen Bar. Es sollte möglich sein, eine Fooohne Barzugehörige zu erstellen , daher denke ich nicht, Bardass als Eltern behandelt werden sollte.