Rae*_*ark 3 rest entity-framework asp.net-web-api
这是我正在处理的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; }
}
Run Code Online (Sandbox Code Playgroud)
Unit类看起来像这样:
public class Unit
{
[Key]
public int ID { get; set; }
[MaxLength(50)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在开发一个Web API,它将获取跟踪器列表,并获取可用单元列表,然后将一个特定单元添加到跟踪器的单元列表中.跟踪器和单元有自己的API控制器和存储库,我试图弄清楚如何修改它们以支持创建这种关联,以及请求的样子.
是否适合通过PUT更新Tracker端点(/ Trackers/1)以将新单元添加到列表中,可能与现有单元一起添加?我该如何处理后端?我认为我对PUT方法的一个心理障碍是 - 我会将整个子对象包含在请求正文集合属性中吗?它没有意义,但我不确定它会如何起作用.假设(在我的情况下)将是添加到跟踪器列表中的单元将是已存在的单元,我们只是创建关联.我是否应该使用DTO来实现这两个目标,并相应地映射它们?
或者更有意义的是创建一个新的联合DTO,比如"TrackerUnit",它有一个相应的端点,我可以通过POST到该端点(POST/TrackerUnits)添加新的关联,然后在新的控制器中处理它的处理?我认为它还需要支持DELETE来删除项目.我并不为这种方法感到疯狂,因为这个端点不对应于我系统中的任何实际资源,而只是用于映射这些关联.
如何创建端点:
/Trackers/{id}/units
Run Code Online (Sandbox Code Playgroud)
然后您可以将一个单位发布到此终端以与{id}标识的跟踪器关联,或类似地:
DELETE /Trackers/{id}/Units/{unitid}
Run Code Online (Sandbox Code Playgroud)
删除一个单位.
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |