RESTful接口-添加子对象

本文关键字:对象 添加 接口 RESTful | 更新日期: 2023-09-27 18:00:15

我公开了一个RESTful接口,允许添加CategorySubCategory类型。

类别

public class Category : EntityBase<Category>
{
    public string Name { get; set; }
    public bool Enabled { get; set; }
    public virtual ICollection<SubCategory> SubCategories { get; set; }
}

子类别

public class SubCategory : EntityBase<SubCategory>
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public bool Enabled { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}

我的问题是,我是否应该将Category对象及其关联的子对象SubCategories传递给它,然后计算出哪些子对象是新的:

public void AddSubCategory(Category category)
{
    // Figure out what object on the SubCategories collection are new (no PK value?)?
}

还是这样的方法会更好?:

public void AddSubCategory(int categoryId, SubCategory subCategory);

RESTful接口-添加子对象

您的第二种方法更干净,但可能需要更长的时间才能在前端进行设置。您可以直接将子类别推送到您的db/store中[尽管我建议在存储过程或实体存储库中进行检查,以防止两个子类别同名]。

使用第一种方法,您将需要遍历整个子类别列表,并可能对每个子类别进行数据库调用,或者做一些混乱的事情,比如将整个列表提交到存储过程中,然后在其中进行遍历。

第二种方法的规模也会更好。考虑有多少数据被发送到服务器,然后随着子类别列表的增长而被重新处理。

除了传输冗余数据和可能导致大量额外的数据库调用之外,您可能还担心那些将实现API的人的风格选择,我认为开发人员希望使用单独的方法来添加、更新、删除,并会发现提交整个列表令人困惑。

干杯

嗯,我认为这个问题没有明显的答案,归根结底是品味问题。

就我个人而言,如果你希望一次只添加一个对象,我会选择第二种方法,因为它可以节省你在子类别列表上的迭代,这将有利于你的应用程序的性能。你永远不知道你的应用程序将如何扩展,最终可能会有很多类别需要处理。

我要做的是采取第二种方法,但由于您的第二个方法中已经有CategoryId,我只会将签名更改为:

public void AddSubCategory(SubCategory subCategory);

并从子类别中提取类别id。