我正在设计一个实用的REST API,并且对如何最好地将现有实体添加到集合中有些困惑。我的域模型包括一个具有站点集合的项目。这是一个严格的多对多关系,我无需创建一个显式建模该关系的实体(即ProjectSite)。
我的API将允许使用者将现有站点添加到项目中。我挂断电话的地方是,我真正需要的唯一数据是ProjectId和SiteId。我最初的想法是:
1. POST myapi/projects/{projectId}/sites/{siteId}
但是我也想过
2. POST myapi/projects/{projectId}/sites
与作为JSON内容发送的Site实体。
选项1简单易用,但感觉不太正确,而且我还有其他关系无法遵循此模式,因此它增加了我的API的不一致性。
选项2感觉更好,但引起两个问题:
- 如果发布了新网站(SiteId = 0),我应该创建一个网站还是引发异常?
- 因为我只需要ProjectId和SiteId来创建关系,所以该站点可能发布的其他属性数据有误或缺失。
第三种选择是提供一个仅用于创建和删除关系的简单端点。该端点将期望仅包含ProjectId和SiteId的JSON有效负载。
你怎么看?