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

      

  • 相关阅读:
    nose测试中修改nose_html_reporting插件,使生成的html报告加入显示截图功能
    python selenium中等待元素出现及等待元素消失操作
    在python pydev中使用todo标注任务
    云存储命令行工具---libs3
    关于qt creator各种假死的问题
    小端存储转大端存储 & 大端存储转小端存储
    C++判断计算式是大端存储模式,还是小端存储模式
    请教网友:#pragma pack(push) #pragma pack(pop)无效
    sizeof 计算 struct 占字节数的方法总结
    const 变量在多个文件共享,如何验证两种不同的方式下,编译器是否会在多个文件下建立多个副本
  • 原文地址:https://www.cnblogs.com/JohnTang/p/10969908.html
Copyright © 2020-2023  润新知