本文为我的对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