重溫ASP.NET WebAPI(一)初階


前言

本文為個人對WebApi的回顧無參考價值。主要簡單介紹WEB api和webapi項目的基本結構,並創建簡單地webaapi項目實現CRUD操作。

在商業應用領域中,應用之間的關聯是相當重要的,應用之間如移動應用或者單頁應用的創建,都需要強大的后端服務提供相應的數據以便進行CRUD操作。

WCF and WebApi 的不同

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

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

WCF

ASP.NET Web API

支持多種傳輸協議(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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM