3

这是一个特定于我正在处理的 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)添加新的关联,然后在新控制器中处理它?我认为它还需要支持删除来删除项目。我对这种方法并不感兴趣,因为这个端点不会对应于我系统中的任何实际资源,而只是用于映射这些关联。

4

1 回答 1

5

如何创建端点:

/Trackers/{id}/units

然后您可以将一个单元发布到此端点以与 {id} 标识的跟踪器相关联,或者类似地:

DELETE /Trackers/{id}/Units/{unitid}

删除一个单元。

于 2013-04-26T08:09:48.737 回答