这是一个特定于我正在处理的 Web API 项目的设计问题,但它可能是 REST 原则的普遍问题。这也有可能我完全想多了。
我在实体框架中有一个类,它有另一个类的子集合:
public abstract class Tracker
{
[Key]
public int ID { get; set; }
[MaxLength(50)]
public string Name { get; set; }
public virtual ICollection<Unit> Units { get; set; }
}
Unit 类如下所示:
public class Unit
{
[Key]
public int ID { get; set; }
[MaxLength(50)]
public string Name { get; set; }
}
我正在开发一个 Web API,它将获取跟踪器列表,并获取可用单元列表,然后将特定单元添加到跟踪器的单元列表中。Tracker 和 Units 有自己的 API 控制器和存储库,我试图弄清楚如何修改它们以支持创建此关联,以及请求的外观。
是否适合通过 PUT 更新 Tracker 端点 (/Trackers/1) 以将新单元添加到列表中,可能与现有单元一起?我将如何在后端处理它?我认为我使用 PUT 方法遇到的心理障碍之一是 - 我会将整个子对象包含在请求正文集合属性中吗?这没有任何意义,但我不确定它会如何工作。假设(在我的情况下)是添加到跟踪器列表中的单元将是一个已经存在的单元,我们只是在创建关联。我是否应该对这两者都使用 DTO 来更简单地完成此任务并相应地映射它们?
或者创建一些新的联合 DTO(如“TrackerUnit”)和相应的端点是否更有意义,我可以通过 POST 到该端点(POST /TrackerUnits)添加新的关联,然后在新控制器中处理它?我认为它还需要支持删除来删除项目。我对这种方法并不感兴趣,因为这个端点不会对应于我系统中的任何实际资源,而只是用于映射这些关联。