什麼以及為什麼 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);
}
}