前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model

使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model

作者头像
solenovex
发布2020-02-11 17:39:41
4620
发布2020-02-11 17:39:41
举报
文章被收录于专栏:草根专栏

Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的。

而面向外部的 model 则表示了要传输的东西。这类 model 有时候叫做 Dto,有时候叫做 ViewModel。

举一个例子,人员的Entity Model如下:

public class 
Person 
O references 
public 
O references 
public 
O references 
public 
O references 
public 
{ get; set; } 
Guid Id 
{ get; set; } 
string 
FirstName 
{ get; set; } 
string 
LastName 
{ get; 
DateTimeOffset Date0fBirth 
set;
public class Person O references public O references public O references public O references public { get; set; } Guid Id { get; set; } string FirstName { get; set; } string LastName { get; DateTimeOffset Date0fBirth set;

最后一个字段表示人员的出生日期。

而它的面向外部的model:PersonDto是这样的:

public class 
PersonDt 
O references 
public 
O references 
public 
O references 
public 
O references 
public 
{ get; set; 
Guid Id 
{ get; set; } 
string 
Name 
{ get; set; 
int 
Age 
SalaryÉ 
{ get; set; 
decimal
public class PersonDt O references public O references public O references public O references public { get; set; Guid Id { get; set; } string Name { get; set; int Age SalaryÉ { get; set; decimal
  • 而API消费者并不需要人员的出生日期,它只是需要人员的年龄,所以在PersonDto里面没有DateOfBirth这个字段,取而代之的是 Age(年龄)这个字段,它是通过转换得到的。
  • 另外一点不同就是在 Person 这个 Entity Model 里面,姓和名是两个不同的属性,而在PersonDto里面,它们连接称为一个Name字段了。
  • 此外,还可能从其它地方获取一些数据,例如 PersonDto 的 Salary 属性就可能来自其它的 Entity Model 或者 API,然后将其组合到 PersonDto里面。

可以看出,把 Entity Model 和 面向外部的 Model 分离开来会使得程序更加健壮、可靠和更易于进化。

假如数据库的表发生了变化,那么 Entity Model 类就需要随之变化,如果你使用同一个 Entity Model 作为 Web API 面向外部直接暴露的 Model 的话,那么 API 消费者就极有可能会遇到问题,因为它们无法预知资源添加、修改或是删除了某些属性。这也让 Web API 的版本控制非常困难,因为直接使用了 Entity Model 作为面向外部的 Model 的话,数据库就无法和 API 分开进化了。所以让两者分开是非常重要的。

HTTP HEAD

HTTP HEAD 和 HTTP GET 之间的关系比较紧密。

HEAD 和 GET 几乎是一样的,只是有一点重要的不同:HEAD 的 API 不应该返回响应的 body,所以也就没有响应 Payload 了。

HEAD 可以用来在资源上获取一些信息,因为响应的 header 是会被返回的。

例如在支持缓存的系统里,HEAD 响应的 header 里可能会包含关于资源是否仍然有效的信息,或者资源是否近期被更新了。

另一个例子就是检查API是否可以访问,也就是说资源是否存在。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTP HEAD
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档