Ich habe eine Objekthierarchie, die ich über eine RESTful-API verfügbar machen muss, und ich bin nicht sicher, wie meine URLs strukturiert sein sollen und was sie zurückgeben sollen. Ich konnte keine Best Practices finden.
Nehmen wir an, ich habe Hunde und Katzen, die von Tieren erben. Ich brauche CRUD-Operationen an Hunden und Katzen. Ich möchte auch in der Lage sein, Operationen an Tieren im Allgemeinen durchzuführen.
Meine erste Idee war, so etwas zu machen:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
Die Sache ist, dass die / animal-Sammlung jetzt "inkonsistent" ist, da sie zurückkehren und Objekte aufnehmen kann, die nicht genau die gleiche Struktur haben (Hunde und Katzen). Wird es als "RESTful" angesehen, wenn eine Sammlung Objekte mit unterschiedlichen Attributen zurückgibt?
Eine andere Lösung wäre, eine URL für jeden konkreten Typ wie folgt zu erstellen:
GET /dogs # get all dogs
POST /dogs # create a dog
GET /dogs/123 # get dog 123
GET /cats # get all cats
POST /cats # create a cat
GET /cats/123 # get cat 123
Aber jetzt ist die Beziehung zwischen Hunden und Katzen verloren. Wenn alle Tiere abgerufen werden sollen, müssen sowohl die Hunde- als auch die Katzenressourcen abgefragt werden. Die Anzahl der URLs erhöht sich auch mit jedem neuen Tier-Subtyp.
Ein weiterer Vorschlag war, die zweite Lösung durch Hinzufügen zu ergänzen:
GET /animals # get common attributes of all animals
In diesem Fall würden die zurückgegebenen Tiere nur Attribute enthalten, die allen Tieren gemeinsam sind, wobei hundespezifische und katzenspezifische Attribute gelöscht würden. Dies ermöglicht das Abrufen aller Tiere, wenn auch mit weniger Details. Jedes zurückgegebene Objekt kann einen Link zur detaillierten, konkreten Version enthalten.
Irgendwelche Kommentare oder Vorschläge?