Ich entwerfe eine pragmatische REST-API und bin ein wenig überlegt, wie vorhandene Entitäten einer Sammlung am besten hinzugefügt werden können. Mein Domain-Modell enthält ein Projekt mit einer Sammlung von Websites. Dies ist eine strenge Viele-zu-Viele-Beziehung, und ich muss keine Entität erstellen, die die Beziehung explizit modelliert (z. B. ProjectSite).
Meine API ermöglicht es Verbrauchern, eine vorhandene Site zu einem Projekt hinzuzufügen. Wo ich aufgehängt werde, ist, dass die einzigen Daten, die ich wirklich brauche, ProjectId und SiteId sind. Meine ursprüngliche Idee war:
1. POST myapi/projects/{projectId}/sites/{siteId}
Aber ich habe auch darüber nachgedacht
2. POST myapi/projects/{projectId}/sites
mit einer Site-Entität, die als JSON-Inhalt gesendet wurde.
Option 1 ist einfach und funktioniert, fühlt sich aber nicht richtig an. Ich habe andere Beziehungen, die diesem Muster nicht folgen können, sodass meine API inkonsistent wird.
Option 2 fühlt sich besser an, führt aber zu zwei Bedenken:
- Soll ich eine Site erstellen oder eine Ausnahme auslösen, wenn eine neue Site veröffentlicht wird (SiteId = 0)?
- Da ich zum Erstellen der Beziehung nur ProjectId und SiteId benötige, wird die Site möglicherweise mit falschen oder fehlenden Daten für andere Eigenschaften gepostet.
Eine dritte Option besteht darin, einen einfachen Endpunkt ausschließlich zum Erstellen und Löschen der Beziehung bereitzustellen. Dieser Endpunkt würde eine JSON-Nutzlast erwarten, die nur ProjectId und SiteId enthält.
Was denkst du?