什麼以及為什麼 Asp.Net Web API2

什麼和為什麼?

Asp.Net 的 Web API2 是 Web API 的最新版本。使用 Asp.Net 框架提供的所有優點,這是一種實現 RESTful Web 服務的簡單方法。一旦理解了 REST 的基本原理,就可以很容易地實現 Asp.net Web API2。Web API2 構建於 Asp.Net 的模組化可插拔管道模型之上。這意味著當託管 Web API2 的伺服器收到請求時,它首先通過 Asp.Nets 請求管道。如果你發現預設功能不足以滿足你的需求,則可以輕鬆新增自己的模組。隨著最近關於 ASP.net vNext 的公告,這也意味著你可以在 Windows Server 之外託管 Web API2,從而開啟了一系列用例。詳情請見此處

怎麼樣?

Web API2 使用 MVC 中的 Controller 和 Action 概念。資源直接對映到控制器; 你通常會為每個主要資料實體(產品,人員,訂單等)使用不同的控制器。Web API2 使用 Asp.Net 路由引擎將 URL 對映到控制器。通常,API 儲存在/api/路由中,這有助於區分 API 控制器與同一網站中的其他非 API。

操作用於對映到特定的 HTTP 謂詞,例如,你通常會有一個返回所有實體的 GET 操作。這個動作會響應/api/Products(其中’products’是你的控制器),看起來像這樣:

 public IEnumerable<string> Get()
 {
     return new string[] { "value1", "value2" };
 }

你可能還有一個 GET 操作,它接受特定的 ID 並返回一個特定的實體。它會響應/api/Products/81,看起來像這樣:

public string Get(int id)
 {
    return "value";
 }

使用 Web API 有很多隱藏的好處,你可能沒有意識到,但實際上為你節省了大量的工作。

Web API2 是’One Asp.Net’的一部分

Web API2 是“One Asp.Net”系列的一部分,這意味著它本身支援你當前可能與 MVC 或 Web 表單一起使用的所有優秀共享功能,這包括(這些僅是幾個示例):

  • 實體框架
  • 授權和身份
  • Scaffolding
  • 路由

序列化和模型繫結

Web API2 預設設定為以 XML 或 JSON 格式提供響應(預設為 JSON)。但是,作為開發人員,你不需要進行任何轉換或解析 - 你只需返回一個強型別物件,Web API2 將其轉換為 XML 或 JSON 並將其返回給呼叫客戶端,這是一個名為 Content Negotiation 的過程。這是一個 GET 動作的示例,它返回一個強型別的 Product 物件。

 public Product GetProduct(int id)
 {
    var product = _products.FirstOrDefault(p => p.ID == id);
    if (product == null)
    {
       throw new HttpResponseException(HttpStatusCode.NotFound);
    }
    return Request.CreateResponse(HttpStatusCode.OK, product);
 }

這也適用於使用稱為模型驗證的功能的傳入請求。通過模型驗證,Web API2 能夠驗證傳入的響應正文資料並將其解析為強型別物件,以便你在程式碼中使用。這是模型繫結的一個示例:

 public HttpResponseMessage Post(Product product)
 {
     if (ModelState.IsValid)
     {
         // Do something with the product (not shown).
 
         return new HttpResponseMessage(HttpStatusCode.OK);
     }
     else
     {
         return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
     }
 }