WebApi系列~基于RESTful標(biao)準的Web Api
微軟的(de)web api是(shi)在(zai)vs2012上的(de)mvc4項目綁定(ding)發行的(de),它(ta)提出的(de)web api是(shi)完全基于RESTful標準(zhun)的(de),完全不同于之前的(de)(同是(shi)SOAP協(xie)議的(de))wcf和webService,它(ta)是(shi)簡(jian)單(dan),代碼可(ke)讀性強的(de),上手快的(de),如果要拿它(ta)和web服務相比(bi),我會說,它(ta)的(de)接口(kou)更(geng)標準(zhun),更(geng)清晰,沒有(you)混亂的(de)方(fang)法(fa)名稱,有(you)的(de)只有(you)幾種標準(zhun)的(de)請求(qiu),如get,post,put,delete等,它(ta)們分別對應(ying)的(de)幾個操(cao)作,下面(mian)講一下:
GET:生到數(shu)據列表(biao)(默認),或(huo)者得到一條實體數(shu)據
POST:添加服務(wu)端添加一條記錄,記錄實(shi)體為Form對象(xiang)
PUT:添加或修改服務端的(de)(de)一條記(ji)錄(lu),記(ji)錄(lu)實體(ti)的(de)(de)Form對象,記(ji)錄(lu)主鍵以GET方式進行(xing)傳輸
DELETE:刪(shan)除 服務端的一條(tiao)記錄
注(zhu)意(yi)上面公開的(de)(de)(de)API接口都是(shi)在XMLHttpRequest情況(kuang)下調(diao)(diao)用(yong)的(de)(de)(de),當然你可(ke)以(yi)使用(yong)jquery的(de)(de)(de)ajax組件來(lai)完(wan)成這(zhe)個請求調(diao)(diao)用(yong),它(ta)的(de)(de)(de)代碼更加面向(xiang)對(dui)象,下面舉例說明一下
這是(shi)頁面的HTML代碼部分,實現最基本的CRUD操(cao)作(zuo)
<fieldset>
<legend>測(ce)試Web Api
</legend>
<a href="javascript:add()">添加(post)</a>
<a href="javascript:update(1)">更新(put)</a>
<a href="javascript:deletes(1)">刪除(delete)</a>
<a href="/api/test">列表(Get)</a>
<a href="/api/test/1">實體(Get)</a>
</fieldset>
<script>
function add() {
$.ajax({
url : "/api/Test/",
type : "POST",
data :{"UserID":4,"UserName":"test","UserEmail":"Parry@ywjunkang.com"},
success: function (data) { alert(JSON.stringify(data)); }
});
}
//更新
function update(id) {
$.ajax({
url : "/api/Test?id="+id,
type : "Put",
data :{"UserID":1,"UserName":"moditest","UserEmail":"Parry@ywjunkang.com"},
success: function (data) { alert(JSON.stringify(data)); }
});
}
function deletes(id) {
$.ajax({
url : "/api/Test/1",
type : "DELETE",
success: function (data) { alert(data);}
});
}
</script>
下面是(shi)ApiController部分的代碼:
/// <summary> /// Test模塊API /// URI:/Api/Test /// </summary> public class TestController : ApiController { /// <summary> /// User Data List /// </summary> private readonly List<Users> _userList = new List<Users> { new Users {UserID = 1, UserName = "zzl", UserEmail = "bfyxzls@sina.com"}, new Users {UserID = 2, UserName = "Spiderman", UserEmail = "Spiderman@ywjunkang.com"}, new Users {UserID = 3, UserName = "Batman", UserEmail = "Batman@ywjunkang.com"} }; /// <summary> /// 得到(dao)列表對象 /// </summary> /// <returns></returns> public IEnumerable<Users> Get() { return _userList; } /// <summary> /// 得到一個實體,根據主鍵 /// </summary> /// <param name="id"></param> /// <returns></returns> public Users Get(int id) { return _userList.FirstOrDefault(i => i.UserID == id); } /// <summary> /// 添加 /// </summary> /// <param name="form">表單對象,它(ta)是(shi)唯一的</param> /// <returns></returns> public Users Post([FromBody] Users entity) { _userList.Add(entity); return entity; } /// <summary> /// 更新 /// </summary> /// <param name="id">主鍵</param> /// <param name="form">表單對象,它(ta)是唯一的</param> /// <returns></returns> public Users Put(int id, [FromBody]Users entity) { var user = _userList.FirstOrDefault(i => i.UserID == id); if (user != null) { user.UserName = entity.UserName; user.UserEmail = entity.UserEmail; } return user; } /// <summary> /// 刪除 /// </summary> /// <param name="id">主鍵</param> /// <returns></returns> public void Delete(int id) { _userList.Remove(_userList.FirstOrDefault(i=>i.UserID==id)); } }
下面我們(men)看一下各(ge)個操作調用(yong)的(de)結果:
添加操(cao)作(zuo)(POST)
更新操作(PUT)
最后,再強調(diao)一下(xia),web api使用RESTful架構的(de)(de)(de),不像傳統的(de)(de)(de)(同是(shi)SOAP的(de)(de)(de)) RPC方(fang)式(shi)的(de)(de)(de)wcf和web Service,它強調(diao)的(de)(de)(de)是(shi)接口模(mo)塊的(de)(de)(de)概念,每個(ge)模(mo)塊都(dou)是(shi)獨立的(de)(de)(de),每個(ge)模(mo)塊的(de)(de)(de)接口方(fang)法(fa)都(dou)是(shi)統一的(de)(de)(de)和單(dan)一的(de)(de)(de),即CRUD方(fang)法(fa)組成。
感謝您的閱讀!