Projektuję pragmatyczny interfejs API REST i trochę utknąłem na tym, jak najlepiej dodawać istniejące elementy do kolekcji. Mój model domeny obejmuje projekt, który ma zbiór witryn. Jest to ścisła relacja wiele do wielu i nie muszę tworzyć encji, która jawnie modeluje relację (tj. ProjectSite).
Mój interfejs API pozwoli konsumentom dodać istniejącą witrynę do projektu. Rozłącza mnie to, że jedyne dane, których naprawdę potrzebuję, to ProjectId i SiteId. Mój początkowy pomysł brzmiał:
1. POST myapi/projects/{projectId}/sites/{siteId}
Ale myślałem również
2. POST myapi/projects/{projectId}/sites
z jednostką witryny wysłaną jako treść JSON.
Opcja 1 jest prosta i działa, ale nie wydaje się całkiem właściwa, i mam inne relacje, które nie mogą podążać za tym wzorem, więc dodaje niespójności do mojego interfejsu API.
Opcja 2 wydaje się lepsza, ale prowadzi do dwóch obaw:
- Czy powinienem utworzyć witrynę, czy zgłosić wyjątek, jeśli zostanie opublikowana nowa witryna (SiteId = 0)?
- Ponieważ do utworzenia relacji potrzebuję tylko ProjectId i SiteId, witryna może zostać opublikowana z błędnymi lub brakującymi danymi dla innych właściwości.
Trzecią opcją jest zapewnienie prostego punktu końcowego wyłącznie do tworzenia i usuwania relacji. Ten punkt końcowy oczekiwałby ładunku JSON zawierającego tylko ProjectId i SiteId.
Co myślisz?