Meines Wissens nach sollte jeder einzelne Ressourcenpfad nur einen kanonischen Pfad haben. Also, in dem folgenden Beispiel, welche wären gute URL-Muster?
Nehmen wir zum Beispiel eine REST-Repräsentation von Unternehmen. In diesem hypothetischen Beispiel, besitzt jedes Unternehmen 0 oder mehr Abteilungen und jede Abteilung 0 oder mehr Mitarbeiter.
Ein Abteilung kann nicht existieren ohne ein zugehöriges Unternehmen.
Ein Mitarbeiter kann nicht existieren ohne eine zugehörige Abteilung.
Nun würde ich die natürliche Darstellung der Ressourcenmuster wie folgt finden.
/unternehmen
Eine Sammlung von Unternehmen - Akzeptiert POST für ein neues Unternehmen. Erhalte die gesamte Sammlung./unternehmen/{unternehmensId}
Ein einzelnes Unternehmen. Akzeptiert GET, PUT und DELETE/unternehmen/{unternehmensId}/abteilungen
Akzeptiert POST für ein neues Element. (Erstellt eine Abteilung innerhalb des Unternehmens.)/unternehmen/{unternehmensId}/abteilungen/{abteilungsId}/
/unternehmen/{unternehmensId}/abteilungen/{abteilungsId}/mitarbeiter
/unternehmen/{unternehmensId}/abteilungen/{abteilungsId}/mitarbeiter/{maId}
Unter Berücksichtigung der Einschränkungen, fühlt sich jede dieser Abschnitte für mich schlüssig an, wenn auch etwas tief genestet.
Allerdings habe ich Schwierigkeiten, wenn ich alle Mitarbeiter über alle Unternehmen auflisten möchte (GET
).
Das Ressourcenmuster dafür würde am ehesten zu /mitarbeiter
(Die Sammlung aller Mitarbeiter) passen
Bedeutet das, dass ich auch /mitarbeiter/{maId}
haben sollte, weil wenn ja, gibt es dann zwei URIs, um die gleiche Ressource abzurufen?
Oder vielleicht sollte das gesamte Schema abgeflacht werden, aber das würde bedeuten, dass Mitarbeiter ein verschachteltes Top-Level-Objekt sind.
Auf einer grundlegenden Ebene gibt /mitarbeiter/?unternehmen={unternehmensId}&abteilung={abteilungsId}
die genau gleiche Ansicht der Mitarbeiter wie das am tiefsten verschachtelte Muster zurück.
Was ist die bewährte Praxis für URL-Muster, bei denen Ressourcen von anderen Ressourcen besessen werden, aber separat abgefragt werden sollen?