这是一个特定于我正在处理的 Web API 项目的设计问题,但它可能是一个对 REST 原则通用的问题。也有可能我完全想多了。
我在 Entity Framework 中有一个类,它有另一个类的子集合:
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,它将获取跟踪器列表和可用单元列表,然后将特定单元添加到跟踪器的单元列表中。跟踪器和单元有它们自己的 API Controller 和存储库,我正在尝试弄清楚如何修改它们以支持创建此关联,以及请求的外观。
通过 PUT 更新 Tracker 端点 (/Trackers/1) 以将新单元添加到列表中(可能与现有单元一起)是否合适?我将如何在后端处理它?我认为我在使用 PUT 方法时遇到的心理障碍之一是——我是否会将整个子对象包含在请求正文集合属性中?这没有任何意义,但我不确定否则它会如何工作。假设(在我的例子中)是添加到跟踪器列表的单元将是一个已经存在的单元,我们只是在创建关联。我是否应该对这两者使用 DTO 以更简单地完成此操作并相应地映射它们?
或者创建一些新的联合 DTO(如“TrackerUnit”)和相应的端点是否更有意义,我可以通过 POST 到该端点 (POST/TrackerUnits) 添加新的关联,然后在新的 Controller 中处理处理它?我认为它还需要支持 DELETE 来删除项目。我并不喜欢这种方法,因为这个端点不会对应于我系统中的任何实际资源,而只是用于映射这些关联。
最佳答案
如何创建端点:
/Trackers/{id}/units
然后您可以将一个单元发布到此端点以与由 {id} 标识的跟踪器相关联,或类似地:
DELETE /Trackers/{id}/Units/{unitid}
删除一个单元。
关于entity-framework - 如何在 ASP.NET Web API(或一般的 REST)中添加/更新类集合导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16230198/