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


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;

最后一個字段表示人員的出生日期。 

 

而它的面向外部的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(年齡)這個字段,它是通過轉換得到的。 

  • 另外一點不同就是在 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是否可以訪問,也就是說資源是否存在。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM