WebAPI

Posted johntang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebAPI相关的知识,希望对你有一定的参考价值。

WebAPI的由来:

       在早期的时候,我们用来传输数据的接口是   .NetRemoting:平台要求,到后来的Webservice(跨平台、SOAP协议,数据以xml的格式体现)、WCF(也支持Restful风格,但是它

并不是为Restful服务,相对于而言,会显得比较重量级)以上接口,在开发工作中,我们默认为后台接口,而随着移动互联网行业的兴起,调用方可能不再局限于PC,会包括诸如ios\安卓等,此时webapi就诞生了。

那么,WebAPI到底是什么? WebAPI其实就是遵循Restful风格所架设的一种API

 

  Restful概述:

           架构风格,以资源为视角,来描述服务的。

    以json/xml....来描述,http方法 统一了数据操作

 

  Restful要素

 

  表现层的状态转换:资源;统一接口;URI;无状态;

 

     资源:实体就是资源,在数据上体现是: json/xml/数据流......

 

     统一接口:CRUD(增删改查),是通过httpmethod体现 get post put/patch delete

 

     URIurl

 

     Get:查询  post 新增  put/patch 修改 delete 删除

 

     无状态:http无状态(前后没有关联)

 

路由(默认)

1 启动 Application_Start--WebApiConfig.Register--把路由规则写入一个容器

2 运行 请求会去容器匹配--找到第一个满足的控制器--然后找actionhttp method):

       a 以特性为准 [HttpGet][HttpPost][httpPut][Httppatch][HttpDelete] 特性写在方法的上面

       b 方法名Get开头

       c (找方法时)优先最匹配  api/values/1--Get(int id)

 

特性路由

 概念  

 在实际中会存在一个资源,同一种操作更新,可能有多个来源途径,或者不同版本号,如果按照默认路由则无法区分

  我们可以在方法之前加上特性路由标识Route

Route("api/values/id/GetName")]//注意最后的GetName不是方法名,可以理解为别名

 

路由前缀

通常情况下,一个Controller下的action会使用相似的路由模板,如

[Route("api/books")]

·[Route("api/books/id:int")]

·[Route("api/books/bookid/authors")]

这时候可以为整个controller指定[RoutePrefix]特性,以使用共同的前缀,把[RoutePrefix("/api/books")]加到controller上,action的路由特性就变成这样:

·[Route("")]

·[Route("id:int")]

·[Route("bookid/authors")]

此外,路由前缀中也可以包含参数,如[RoutePrefix("api/userid/books")]

这里还有两个小技巧

如果有某个特殊路由不希望使用前缀,可以在路由中添加~,如[Route("~api/otherbooks")]

有时候需要几个路由片段结合起作用,如日期 /api/books/date/2013/06/17

这时候就需要使用字符* ,

[Route("date/*date:datetime:regex(\\d4/\\d2/\\d2)")],不过这种参数只能用作路由的最后一个参数

 

 

 

 

 

  

以上是关于WebAPI的主要内容,如果未能解决你的问题,请参考以下文章

WebAPI学习笔记

WebSerivce与WebAPI的区别

webAPI第一弹---JS

webAPI第一弹---JS

浅谈web api和Webservice

javaScript从入门到精通2.md