Http 使用数据库请求参数
本文关键字:请求 参数 数据库 Http | 更新日期: 2023-09-27 18:35:42
我使用实体框架开发一个Web应用程序。
我的 DbContext 中有一个 DbSet - 字母表。
控制器方法将 db 对象作为参数是否很好。意义:
[HttpPost]
Public IHttpActionResult SendLetter(Letter letterToSend)
目前采用一个字母,这是一个直接的数据库模型。是否应该将其更改为其他模型并在以后进行铸造?
Entity Framework with Code First,至少也可以使用数据对象(dbobject)作为POCO Domain Model对象。我们实际上并不认为它主要是数据对象。它们被认为是域模型 所以就是这样。
因此,问题不是将 db-object 用作控制器操作参数,而是"我可以直接在您的控制器操作参数中使用域模型吗? 数据库对象到控制器参数乍一看绝对是禁忌。但是使用域模型作为操作参数:
当然,意见会有所不同,没有什么能阻止您在操作参数中按原样使用域模型。如果 API 正在处理由域模型 100% 表示的资源,则实际上没有害处。
话虽如此,很多时候,现实世界的应用往往会变得复杂。创建了它们的多个版本,因此 v1 支持 10 个字母字段,而 v2 可以支持 12 个字段。此外,还有特定的验证规则,您可能希望对某些类型的输入运行。除此之外,并非所有请求都映射到域模型。(补丁请求、部分更新、复合模型等)
随着 API 的成熟,您不希望一个 API 方法中的小更改影响多个 API,因为所有这些输入模型都受到此处更改的影响。
因此,更安全的选择是在控制器级别对对象进行单独的"资源模型"设计。它们可以轻松地手动映射到/从域模型映射到/从域模型映射,也可以使用AutoMapper等框架。是的,这很乏味,但从长远来看,可以帮助您隔离验证、目标有效负载、v1 v2 特定模型等。
这纯粹是基于十多年服务发展的个人经验,正如我所说,意见各不相同。