最近對之前設(shè)備監(jiān)控項(xiàng)目中所用的ASP.NET Web API
技術(shù)做了一個小小的總結(jié)倔约,寫了一個簡單的demo,以供師弟師妹們參考坝初。這個系列可以作為ASP.NET Web API的入門實(shí)戰(zhàn)浸剩,demo比較簡單钾军,但是我認(rèn)為對于構(gòu)建基于ASP.NET Web API的REST
風(fēng)格的服務(wù)提供了一個整體的思路,對于入門會有一定的幫助吧绢要。
前言
什么是Web API
Web API是一個比較寬泛的概念吏恭,這里我們提到Web API特指ASP.NET Web API。
官方定義如下重罪,強(qiáng)調(diào)兩個關(guān)鍵點(diǎn)樱哼,即可以對接各種客戶端(瀏覽器,移動設(shè)備)剿配,構(gòu)建http服務(wù)的框架搅幅。Web API利用Http協(xié)議的各個方面來表達(dá)服務(wù)(例如 URI/request response header/caching/versioning/content format),因此就省掉很多配置呼胚。
利用ASP.NET Web API
我們可以很輕松的構(gòu)建REST
風(fēng)格的服務(wù)茄唐。
Web API在ASP.NET完整框架中地位如下圖:
Web API功能簡介
支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作,通過不同的http動作表達(dá)不同的含義砸讳,這樣就不需要暴露多個API來支持這些基本操作琢融。
請求的回復(fù)通過Http Status Code表達(dá)不同含義,并且客戶端可以通過Accept header來與服務(wù)器協(xié)商格式簿寂,例如你希望服務(wù)器返回JSON格式還是XML格式漾抬。
請求的回復(fù)格式支持 JSON,XML常遂,并且可以擴(kuò)展添加其他格式纳令。
原生支持OData。
支持Self-host或者IIS host克胳。
支持大多數(shù)MVC功能平绩,例如Routing/Controller/Action Result/Filter/Model Builder/IOC Container/Dependency Injection。
REST風(fēng)格服務(wù)簡介
REST表示表述性狀態(tài)轉(zhuǎn)移漠另,它代表的是運(yùn)行在HTTP上的一個簡單的無狀態(tài)的架構(gòu)捏雌,每一個唯一URL代表一個資源。在創(chuàng)建RESTful服務(wù)時(shí)笆搓,應(yīng)遵循四個基本的設(shè)計(jì)原則:
使用HTTP方法(動詞)性湿,使用統(tǒng)一的方式來獲取資源(交互的統(tǒng)一接口),即檢索資源使用GET满败,創(chuàng)建資源使用POST肤频, 更新資源使用PUT / PATCH,刪除資源使用DELETE算墨。
與資源的交互是無狀態(tài)的宵荒, 因此由客戶端發(fā)起的每個請求應(yīng)當(dāng)包括HTTP請求的所有參數(shù),上下文信息和所需服務(wù)器返回?cái)?shù)據(jù)數(shù)據(jù)類型等。
資源標(biāo)識應(yīng)通過URI來定義报咳,簡單來說應(yīng)該是只使用URI來完成服務(wù)器與客戶端和資源之間的交互侠讯。這些URI可以看作一個RESTful服務(wù)提供的接口。
支持JSON或/和XML等多種格式作為數(shù)據(jù)傳輸格式少孝。
開發(fā)環(huán)境
筆者所用的開發(fā)環(huán)境如下:
- 操作系統(tǒng):Windows 10 继低,64位
- IDE:Visual Studio 2013
- 數(shù)據(jù)庫:SqlServer 2012
各位小伙伴可以根據(jù)自己的需求選用不同的IDE和數(shù)據(jù)庫,IDE強(qiáng)烈推薦VS2013以上的版本稍走,以免掉坑。
涉及技術(shù)
在我們的實(shí)例中用到了:
- SQL Server數(shù)據(jù)庫保存數(shù)據(jù)
- Web API提供REST風(fēng)格的服務(wù)
- ORM映射采用的是Entity Framework的Code First開發(fā)方式
- Vue.js解析Wen API返回的數(shù)據(jù)柴底,對數(shù)據(jù)的雙向綁定也會做一個簡單的介紹
創(chuàng)建Web API項(xiàng)目
打開VS婿脸,新建項(xiàng)目,創(chuàng)建ASP.NET Web 應(yīng)用程序柄驻,創(chuàng)建相應(yīng)的解決方案狐树,如下圖:
選擇模板為Web API
,我們可以看到MVC
和Web API
兩項(xiàng)已經(jīng)默認(rèn)打勾鸿脓,
作為簡單的 ASP.NET Web API 入門項(xiàng)目抑钟,我們在這里先不涉及身份認(rèn)證,因此野哭,點(diǎn)擊右側(cè)的“更改身份認(rèn)證”在塔,我們選擇“無身份認(rèn)證”,如下圖所示:
就這樣拨黔,一個Web API項(xiàng)目就創(chuàng)建好了蛔溃,不得不感嘆 VS 是宇宙最強(qiáng)大的 IDE ,微軟出的東西就是簡單易用篱蝇。
看一下代碼結(jié)構(gòu)贺待,是典型的MVC,我們可以看到在Controller
文件夾中有兩個自動生成的控制器類零截,供我們參考:
在ValuesController.cs
中麸塞,ValuesController
繼承了ApiController
類,提供了GET
涧衙、POST
哪工、PUT
俱恶、DELETE
方法涧郊,為了讓示例簡單化翅雏,values值被存儲在控制器類中的固定數(shù)組中唯蝶。當(dāng)然捶箱,在實(shí)際應(yīng)用程序中缔逛,你可能想要查詢數(shù)據(jù)庫或使用其他外部數(shù)據(jù)源页响,我們將會在下面的部分進(jìn)行介紹闺魏。代碼如下:
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
控制器定義了兩個返回value值的方法:
- IEnumerable<string> Get()方法將整個列表作為IEnumerable類型返回。
- Get(int id)方法通過它的ID來查找單個value值鸭限。
沒錯蜕径,你已經(jīng)有一個可以使用的web API了“芫控制器上的每個方法都對應(yīng)一個或多個URI兜喻,我們先嘗試調(diào)用一下Web API,點(diǎn)擊啟動調(diào)試赡麦,可以看到項(xiàng)目的主頁是基于Boonstrap的朴皆。
調(diào)用Web API,控制器方法和對應(yīng)的URI如下:
Controlle Method為:IEnumerable<string> Get()
URI為: api/values
Controlle Method為:string Get(int id)
URI為: api/values/id
調(diào)用結(jié)果如下圖(所用瀏覽器為Chrome泛粹,使用IE核瀏覽器會提示保存Json文件):
1.調(diào)用api/values
2.調(diào)用api/values/2
上面調(diào)用Web API返回的格式XML
格式的遂铡,后邊的部分我會介紹如何強(qiáng)制返回Json格式。
下面將具體介紹如何創(chuàng)建數(shù)據(jù)實(shí)體并運(yùn)用Entity Framework與數(shù)據(jù)庫進(jìn)行交流晶姊。