码迷,mamicode.com
首页 > Windows程序 > 详细

WebAPI(一)

时间:2019-06-03 21:49:04      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:默认路由   pos   方法   name   nbsp   str   route   service   包括   

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(\\d{4}/\\d{2}/\\d{2})}")],不过这种参数只能用作路由的最后一个参数

 

 

 

 

 

  

WebAPI(一)

标签:默认路由   pos   方法   name   nbsp   str   route   service   包括   

原文地址:https://www.cnblogs.com/JohnTang/p/10969908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!