本文爲我的對WebApi的回顧無參考價值。主要簡單介紹WEB api和webapi項目的基本結構,並建立簡單地webaapi項目實現CRUD操做。html
在商業應用領域中,應用之間的關聯是至關重要的,應用之間如移動應用或者單頁應用的建立,都須要強大的後端服務提供相應的數據以便進行CRUD操做。web
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是基於標準XML的協議,可以與HTTP通信。能夠理解爲程序之間經過以XML爲格式的SOAP協議進行通信。ASP.NET Web服務提供建立SOAP協議的web服務。
REST協議用於分佈式環境的數據傳輸,它使咱們可以將分佈式服務當作一種資源,並經過簡單的HTTP協議來操做這些資源。
REST對應數據庫CRUD操做的方式,分爲4種:
舉例說明
當站點爲:www.cnblogs.com/blogs, 則表明獲取博客列表數據
當站點爲www.cnblogs.com/blogs/1,則取決於type類型,若是是put,則建立新的BLOG。
若是是post,則更新當前blog。若是是delete,則刪除當前blog。
REST與SOAP對比
WCF比web服務要晚出來。它提供更安全和成熟的方式去建立服務。經過WCF,咱們能夠定義本身的服務,並配置相關的協議如HTTP,TCP或者IPC甚至消息隊列。WCF也能夠建立REST服務。
WCF建立REST服務,須要咱們作大量的配置工做。一般WCF適用於一些特殊場景,如單向消息傳輸,消息隊列,雙工通訊。可是使用WCF建立REST服務過於複雜,並且侷限於.net 3.5 framework。
微軟提出ASP.NET Web API能夠理解爲一個框架,用於快速簡易的建立REST服務。
咱們能夠點開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 } ); } }
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