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

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

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

 

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

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;

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

 

而它的面向外部的modelPersonDto是这样的: 版本控制

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(年龄)这个字段,它是经过转换获得的。 orm

  • 另一点不一样就是在 Person 这个 Entity Model 里面,姓和名是两个不一样的属性,而在PersonDto里面,它们链接称为一个Name字段了。 xml

  • 此外,还可能从其它地方获取一些数据,例如 PersonDto  Salary 属性就可能来自其它的 Entity Model 或者 API,而后将其组合到 PersonDto里面。 ci

 

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

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

 

HTTP HEAD

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

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

HEAD 能够用来在资源上获取一些信息,由于响应的 header 是会被返回的。

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

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

相关文章
相关标签/搜索