天天看點

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

Entity Framework Core 使用的 Entity Model 是用來表示資料庫裡面的記錄的。 

而面向外部的 model 則表示了要傳輸的東西。這類 model 有時候叫做 Dto,有時候叫做 ViewModel。 

舉一個例子,人員的Entity Model如下: 

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

而它的面向外部的model:PersonDto是這樣的: 

而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是否可以通路,也就是說資源是否存在。 

繼續閱讀