重温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 

相关文章
相关标签/搜索