Я разрабатываю прагматичный REST API и немного застрял в том, как лучше всего добавить существующие сущности в коллекцию. Моя модель домена включает в себя проект, который имеет коллекцию сайтов. Это строгое отношение «многие ко многим», и мне не нужно создавать сущность, которая явно моделирует отношение (например, ProjectSite).
Мой API позволит потребителям добавлять существующий сайт в проект. Я зациклен на том, что мне нужны только данные ProjectId и SiteId. Моя первоначальная идея была:
1. POST myapi/projects/{projectId}/sites/{siteId}
Но я тоже думал о
2. POST myapi/projects/{projectId}/sites
с объектом Site, отправленным как контент JSON.
Вариант 1 прост и работает, но не совсем правильно, и у меня есть другие отношения, которые не могут следовать этому шаблону, поэтому он добавляет непоследовательность в мой API.
Вариант 2 чувствует себя лучше, но приводит к двум проблемам:
- Должен ли я создать сайт или выдать исключение, если новый сайт опубликован (SiteId = 0)?
- Поскольку мне нужны только ProjectId и SiteId для создания отношения, сайт может быть опубликован с неверными или отсутствующими данными для других свойств.
Третий вариант - предоставить простую конечную точку исключительно для создания и удаления отношений. Эта конечная точка будет ожидать полезной нагрузки JSON, содержащей только ProjectId и SiteId.
Что вы думаете?