使用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是否能夠訪問,也就是說資源是否存在。

相關文章
相關標籤/搜索