重溫ASP.NET WebAPI(一)初階

前言

本文爲我的對WebApi的回顧無參考價值。主要簡單介紹WEB api和webapi項目的基本結構,並建立簡單地webaapi項目實現CRUD操做。html

在商業應用領域中,應用之間的關聯是至關重要的,應用之間如移動應用或者單頁應用的建立,都須要強大的後端服務提供相應的數據以便進行CRUD操做。web

WCF and WebApi 的不一樣

WCF是基於SOAP協議,支持多種傳輸協議,多種編碼,寄宿於.net framework下,須要生產WSDL代理類文件,更安全可靠。數據庫

WebApi是基於HTTP協議,支持XML和json,開源可獨立出.net framework。REST風格更適合。json

WCF後端

ASP.NET Web APIapi

支持多種傳輸協議(HTTP, TCP, UDP和自定義傳輸協議),容許在協議之間進行切換瀏覽器

只支持HTTP協議。比較適合傳輸來自各類瀏覽器、移動應用。安全

支持多種編碼格式(Text, MTOM, Binary),容許相互切換。框架

支持各類媒體類型,如XML和JSON分佈式

符合Web服務標準(可靠的數據,傳輸,和數據安全)

不支持高標準的協議,如數據可靠性或者傳輸準確性。基於基本的協議和排版,如HTTP, WebSockets, SSL, JQuery, JSON, XML

支持請求回覆、單線和多重消息交換模式

支持HTTP的請求響應模式,但也支持擴展的,如SignalR和WebSocket的整合

基於SOAP協議,所以須要被描述爲WSDL,容許自動化工具生成客戶端代理,即便服務含有複雜的模式

支持多種方式描述API。從自動生成HTML幫助頁面描述,到使用結構metadata整合ODATA到APIs中等等。

寄宿於.net framework

寄宿於.net framework可是開源,也可以獨立的下載

使用WCF建立可靠,安全的web服務,能夠支持多種傳輸協議。使用WebAPI建立基於http協議的服務,服務更廣的用戶羣。當建立和設計新的基於REST風格的服務是,採用webapi。雖然WCF也提供支持寫REST風格的服務,可是Webapi的支持更好。

SOAP 和 ASP.NET  Web 服務

SOAP是基於標準XML的協議,可以與HTTP通信。能夠理解爲程序之間經過以XML爲格式的SOAP協議進行通信。ASP.NET Web服務提供建立SOAP協議的web服務。

SOAP的問題

  1. 元數據metadata也會被傳輸,佔用傳輸空間。
  2. 須要在客戶端建立代理類。當服務端更新服務,客戶端也要及時更新代理類。

REST

REST協議用於分佈式環境的數據傳輸,它使咱們可以將分佈式服務當作一種資源,並經過簡單的HTTP協議來操做這些資源。

REST對應數據庫CRUD操做的方式,分爲4種:

  1. GET:至關於CRUD操做中的R,數據獲取
  2. PUT:至關於CRUD操做中的U,數據更改
  3. POST:至關於CRUD操做中的C,數據建立
  4. DELETE:至關於CRUD操做中的D,數據刪除

舉例說明

當站點爲:www.cnblogs.com/blogs, 則表明獲取博客列表數據

                當站點爲www.cnblogs.com/blogs/1,則取決於type類型,若是是put,則建立新的BLOG。

                若是是post,則更新當前blog。若是是delete,則刪除當前blog。

REST與SOAP對比

  1. 只有使用的數據被傳輸,而沒有元數據。
  2. 省略了代理的建立。

WCF REST服務

WCF比web服務要晚出來。它提供更安全和成熟的方式去建立服務。經過WCF,咱們能夠定義本身的服務,並配置相關的協議如HTTP,TCP或者IPC甚至消息隊列。WCF也能夠建立REST服務。

WCF建立REST服務,須要咱們作大量的配置工做。一般WCF適用於一些特殊場景,如單向消息傳輸,消息隊列,雙工通訊。可是使用WCF建立REST服務過於複雜,並且侷限於.net 3.5 framework。

ASP.NET Web API介紹

微軟提出ASP.NET Web API能夠理解爲一個框架,用於快速簡易的建立REST服務。

Web API的入門建立

咱們能夠點開Values的controller,它集成ApiController,實現的通常的Get,Post,Put,Delete的功能。並提供了響應的URL路徑說明。

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)
        {
        }
    }

打開App_Start文件下的RouteConfig.cs文件,能夠看到完整的api路由設置。

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

實現本身的webapi

public class UserController : ApiController
    {
        public IHttpActionResult GetRead()
        {
            var employeeListViewModel = new EmployeeListViewModel();

            var empBal = new EmployeeBusinessLayer();
            var employees =  empBal.GetEmployees();

            var empViewModels = employees.Select(emp => new EmployeeViewModel
            {
                Name = emp.Name,
                Salary = emp.Salary.ToString(),
                SalaryColor = emp.Salary > 15000 ? "yellow" : "green"
            }).ToList();

            employeeListViewModel.Employees = empViewModels;
            employeeListViewModel.UserName = User.Identity.Name;
            return Ok(employees);
        }
}

以上是初階的內容,進階地址:

http://www.cnblogs.com/ruanyifeng/p/5455105.html 

相關文章
相關標籤/搜索