前言
本文為個人對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的問題
- 元數據metadata也會被傳輸,占用傳輸空間。
- 需要在客戶端創建代理類。當服務端更新服務,客戶端也要及時更新代理類。
REST
REST協議用於分布式環境的數據傳輸,它使我們能夠將分布式服務當做一種資源,並通過簡單的HTTP協議來操作這些資源。
REST對應數據庫CRUD操作的方式,分為4種:
- GET:相當於CRUD操作中的R,數據獲取
- PUT:相當於CRUD操作中的U,數據更改
- POST:相當於CRUD操作中的C,數據創建
- DELETE:相當於CRUD操作中的D,數據刪除
舉例說明
當站點為:www.cnblogs.com/blogs, 則代表獲取博客列表數據
當站點為www.cnblogs.com/blogs/1,則取決於type類型,如果是put,則創建新的BLOG。
如果是post,則更新當前blog。如果是delete,則刪除當前blog。
REST與SOAP對比
- 只有使用的數據被傳輸,而沒有元數據。
- 省略了代理的創建。
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