WebApi系列~基於RESTful標準的Web Api

微軟的web api是在vs2012上的mvc4項目綁定發行的,它提出的web api是完全基於RESTful標準的,完全不同於之前的(同是SOAP協議的)wcf和webService,它是簡單,代碼可讀性強的,上手快的,如果要拿它和web服務相比,我會說,它的接口更標準,更清晰,沒有混亂的方法名稱,有的只有幾種標準的請求,如get,post,put,delete等,它們分別對應的幾個操作,下面講一下:

GET:生到數據列表(默認),或者得到一條實體數據

POST:添加服務端添加一條記錄,記錄實體爲Form對象

PUT:添加或修改服務端的一條記錄,記錄實體的Form對象,記錄主鍵以GET方式進行傳輸

DELETE:刪除 服務端的一條記錄

注意上面公開的API接口都是在XMLHttpRequest情況下調用的,當然你可以使用jquery的ajax組件來完成這個請求調用,它的代碼更加面向對象,下面舉例說明一下

這是頁面的HTML代碼部分,實現最基本的CRUD操作

複製代碼
<fieldset>
    <legend>測試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":"[email protected]"},
            success: function (data) { alert(JSON.stringify(data)); }
   
        });

    }

    //更新
    function update(id) {
        $.ajax({
            url    : "/api/Test?id="+id,
            type   : "Put",
            data   :{"UserID":1,"UserName":"moditest","UserEmail":"[email protected]"},
            success: function (data) { alert(JSON.stringify(data)); }
        });

    }
    function deletes(id) {
        $.ajax({
            url    : "/api/Test/1",
            type   : "DELETE",
            success: function (data) { alert(data);}
        });

    }
</script>
複製代碼

下面是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 = "[email protected]"},
           new Users {UserID = 2, UserName = "Spiderman", UserEmail = "[email protected]"},
           new Users {UserID = 3, UserName = "Batman", UserEmail = "[email protected]"}
       };
        /// <summary>
        /// 得到列表對象
        /// </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">表單對象,它是唯一的</param>
        /// <returns></returns>
        public Users Post([FromBody] Users entity)
        {
            _userList.Add(entity);
            return entity;
        }

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="id">主鍵</param>
        /// <param name="form">表單對象,它是唯一的</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));
        }
    }
複製代碼

下面我們看一下各個操作調用的結果:

添加操作(POST)

更新操作(PUT)

 

最後,再強調一下,web api使用RESTful架構的,不像傳統的(同是SOAP的) RPC方式的wcf和web Service,它強調的是接口模塊的概念,每個模塊都是獨立的,每個模塊的接口方法都是統一的和單一的,即CRUD方法組成。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章