假设我有一个控制器CatController
包括 GET、POST 和 PUT 操作。他们都使用相同的Cat
资源可能如下所示:
public class CatDto {
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public bool IsFriendly {get; set; }
}
但是,那Name
and IsFriendly
仅在创建新猫 (POST) 时才需要属性,而在更新它 (PUT) 时则可选,以允许仅更新单个属性。
到目前为止我处理这个问题的方法只是有两个类,一个CreateCat
and UpdateCat
它们具有相同的属性但不同的数据注释。但是我不想维护两个几乎相同的类。
我当然可以在每个操作中手动验证模型,但是数据注释对于全局模型验证器和自动生成 Swagger 模式等事情非常有用。
我还使用 Swagger 模式自动生成 SDK(使用ApiMatic),这会导致生成两个重复的类(CreateCat
and UpdateCat
)实际上应该只是一个资源(Cat
).
有没有其他方法可以仅用一个类来实现我想要做的事情?
老实说,我更喜欢保留单独的模型。
您可以拥有一个具有所有公共属性的基本抽象(或不)模型,尽管这不是必需的,只需添加第三个类。有必要吗?我会说不。
POST 和 PUT 之间存在细微差别。如果 PUT 端点中已有 Id 属性,则 POST 和 PUT 都不需要 Id 属性。这样就无需检查 URL 中的 Id 是否与模型中的 Id 匹配。
您的示例并未使差异可见,但在许多情况下,有些字段您并不真正想要更新。例如,假设您有“创建”和“更新”日期字段,您不希望通过 PUT 等方式更改“创建”日期。您不想通过 PUT 更新的数据越多,模型之间的差异就变得越明显和有价值。
在你的情况下,即使有这 2 个属性,我仍然会创建 2 个不同的模型,即使它们实际上是相同的,这设定了 API 如何工作的期望,并在其他正在研究它的人的头脑中创建了一个清晰的设计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)