WebAPI概述

今天的web计算平台包含了广泛的功能,其中的大部分均可以通过API(应用程序编程接口)访问。

web平台归为6个基本设施,都会用到webapi,包括存储服务、消息服务、计算服务、信息服务、搜索服务、Web2.0服务。

定义:

API是拥有一组函数组成的某种接口,它允许程序员访问应用程序的特定的功能或数据,操作系统或其他服务。

Web API顾名思义,是一个可以使用HTTP协议访问的API。这是一个概念,而不是技术。

我们可以使用不同的技术来构建Web API,如Java、.net等。

ASP.NET Web API是用于构建可以从任何客户机访问(包括浏览器和移动设备)的HTTP服务的框架。 它是一种基于.NET Framework构建RESTful应用程序的理想平台

Asp.Net Web API是一个可扩展的框架,用于构建基于HTTP的服务,这种服务可以在不同平台上的不同应用程序中访问:例如web应用、窗体应用、移动应用等等。

它和ASP.NET MVC有相同的工作方式,但Web Api应用程序接收到请求后返回数据,而不是像MVC返回html视图

它就像一个webservice 或WCF服务,但例外在于它只支持HTTP协议

RESTful架构

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构

ASP.NET Web API VS WCF

web api

wcf

开源,支持.net framework

支持.net framework

只支持HTT通信协议

支持HTTP,TCP,UDP以及自定义通信协议等

良好的路由机制来匹配url与对应接口

基于Attribute来匹配

使用类似于Asp.net MVC的路由规则和Controller模型

使用Service,契约等

不支持可靠的消息传递和事务。

支持可靠的消息传递和事务。

可以使用HttpConfiguration 来配置Web Api,不一定需要web.config配置

使用web.config和Attribute来配置一个服务

适合构建RESTful服务。

支持构建RESTful服务但有局限性

什么时候用WCF

  • 如果你使用的是.net framework3.5,可以选择使用wcf,因为Web Api不支持.net 3.5及更低的版本
  • 如果你需要支持多种协议如HTTP、TCP、命名管道等,可以选择WCF服务。
  • 如果你想建立满足WS - *标准的可靠的消息传递、交易、信息安全方面的服务,可以选择WCF服务。
  • 如果您想要使用请求-应答,单向或者双向消息通信模式,可以选择WCF。

什么时候用Web API

  • 如果您使用的是.Net Framework4.0或以上版本,可以选择Web API。
  • 如果你想建立一个仅支持HTTP协议的服务,可以选择Web API。
  • 如果你想构建基于restful的HTTP服务,可以选择Web API。
  • 如果你已经很了解Asp.Net MVC,可以选择Web API。

Web API Controller

Web API控制器类似于ASP.NET MVC控制器。它用来处理传入的HTTP请求并将响应发送回调用者

Web API控制器是一个类,你可以在控制器文件夹中创建,也可以在您的项目的根文件夹下的任何其他文件夹中创建。

一个控制器类的名字必须以“Controller”结束,它必须继承自System.Web.Http.ApiController类。控制器的所有公共方法(public)被称为操作方法

根据传入的请求URL和HTTP动词(GET/POST/PUT/PATCH/DELETE),Web API决定执行哪个Web API控制器和操作方法,如Get()方法将处理HTTP GET请求,POST()方法将处理HTTP POST请求,Put()方法将处理HTTP PUT请求,DELETE()方法将为上述Web API处理HTTP DELETE请求。

如果你想写一些不用HTTP动词命名的方法,可以给方法添加一些适当的HTTP动词属性,如[HttpGet]  [HttpPost] [HttpPut] 等等就像MVC控制器一样

 特点

  1. 它必须继承自System.Web.Http.ApiController类。
  2. 它可以在项目的根文件夹中的任何文件夹中创建。但是,按照约定建议在控制器文件夹中创建控制器类。
  3. 动作方法名可以与HTTP动词名相同,也可以以HTTP动词开头,或将HTTP动词属性添加到方法上
  4. 一个动作方法的返回类型可以是任何基本或复杂类型

要允许多个HTTP方法进行操作,或者允许GET,PUT,POST和DELETE以外的HTTP方法,请使用AcceptVerbs属性,该属性采用HTTP方法列表。

[AcceptVerbs("GET", "HEAD")]

 public Product FindProduct(id)

Web API控制器与MVC控制器的区别

WebAPI学习

配置Web API

Web API支持基于代码的配置。它不能被配置在Web.config文件中

我们可以配置Web API来定制Web API托管基础设施和组件的行为如路由、格式器,过滤器,DependencyResolver,messagehandler ParamterBindingRules、属性、服务等。

Web API应用程序启动时,配置处理器随之启动(Global.asax)它将通过调用Application_Start方法来调用GlobalConfiguration.Configure(WebApiConfig.Register)方法

Configure()方法需要传入回调方法,该回调方法就是配置Web API的代码。在默认情况下这个回调方法是静态WebApiConfig.Register()方法。

WebApiConfig.Register()方法包含一个类型为 HttpConfiguration的参数,该参数用于用于配置Web API。

HttpConfiguration类包括以下属性,通过它您可以覆盖默认的Web API的行为。

属性

描述

DependencyResolver

获取或者设置依赖的属性

Filters

获取或设置过滤器

Formatters

获取或设置formatters

IncludeErrorDetailPolicy

获取或者设置异常信息是否该包含在error messages中

MessageHandlers

获取或设置Message handlers

ParameterBindingRules

获取或设置参数绑定规则

Properties

获取或设置当前web api实例的properties

Routes

获取或设置路由规则

Services

获取或设置services

Web API路由

WebApiConfig类可以配置Web API

将HTTP请求路由到控制器(控制器是处理HTTP请求的类。)。

Web API路由类似于ASP.NET MVC路由。它传入HTTP请求路由到在Web API控制器的一个特定的操作方法。

主要区别在于Web API使用HTTP方法而不是URI路径来选择操作。您也可以在Web API中使用MVC风格的路由

Web API支持两种类型的路由:

  1. 基于约定的路由
  2. 基于属性的路由

基于约定的路由

在基于约定的路由中,Web API使用模板来确定该请求由哪个路由控制器和操作方法执行。至少有一个路由模板必须添加到路由表,以处理各种HTTP请求

WebAPI学习
/// <summary>
        /// 路由配置等
        /// </summary>
        /// <param name="config"></param>
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // 使Web API 支持 属性路由
            config.MapHttpAttributeRoutes();

            //Web API 的 HTTP路由(默认)
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
}
View Code

相关文章: