zoukankan      html  css  js  c++  java
  • webapi(一) 安静点

    RESTful架构风格

    这个架构风格其实就是接口的设计风格,就是一个规范。

    (1)之前不管是webservice还是wcf都是调用的具体的方法,在restful架构风格中就不是调用具体的方法了。而是资源化,把调用的东西看成一个资源,而且这个资源对外只提供CRUD(增删改查) ,分别对应于http方法比如Create对应于Post Read对应于Get Update对应于Put/Patch Delete对应于Delete  , 这样统一了数据操纵的接口,仅仅通过http方法就能完成所有的增删改查工作。

    (2)严格遵循http协,因为http是无状态的, 所以不会因为调用其它资源失败影响这个资源的调用

    (3) 因为URI(统一资源标识符)能够唯一的标识资源,可以通过URI来访问资源。  只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL,URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位 符”。,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

    URI和URL的区别比较与理解

     url调用的时候默认的是Get的形式,

    WebApi路由

     WebAPI 是开发接口的技术

    特性路由

     创建webapi的时候一般都是有默认路由,如果不想用这个默认路由的调用方式的话,可以使用特性路由给具体的方法定制一个调用形式,它的优先级是高于默认路由的

       [RoutePrefix("api/Values")]
        public class ValuesController : ApiController
        {
            // GET api/values
            //1.匹配请求的Method  
            //2.匹配HttpGet
            //3.匹配参数
    
            //特性路由:优先级最高,绕开默认的Api路由;
            //特性路由:随意的指定我们请求Api的URL
    
            [HttpGet]
            //[Route("api/Values/Get")]
            [Route("Get")]
            public IEnumerable<string> LGetadfsgfsf()
            {
                return new string[] { "value1", "value2" };
            }
    
            //public IEnumerable<string> GetUser()
            //{
            //    return new string[] { "value1", "value2" };
            //}
    
            // GET api/values/5
            //[Route("api/Values/Get/{id:int}")]
            [Route("Get/{id:int}")]
            public string Get(int id)
            {
                return "value-Get";
            }
    
            [Route("Get/{id}")]
            public string GetStr(string id)
            {
                return "value-Get";
            }
    
            //[Route("api/Values/Get/{id:int}/V2/Richard")]
            [Route("Get/{id:int}/V2/Richard")]
            public string GetV2(int id)
            {
                return "value-GetV2";
            }
    
    
            // 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)
            {
            }
        }

     WebApi的权限认证

     传统方式:基于Session Cookies ,在Webapi 是不支持的,但是可以自行扩展来支持;

    (1)Basic基础认证

    因为WebApi是基于http协议的,http协议又是无状态的,所以通过获取令牌,或者说token来认证,来确定登录的人是谁的。请求服务器webapi的时候带上token,然后对token进行验证,看看这个token是否存在。令牌这个

      

    WebApi跨域问题

    一个MVC项目端口是1,一个webapi项目的端口是2,但是mvc项目中使用ajax调用了webapi的项目,这时候就产生了跨域,要是在mvc项目中以webapi的接口形式调用也不会产生跨域。 

     同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。

    as

  • 相关阅读:
    由优化反射性能问题引发的思考
    Flash还能走多远?
    .net CLR 4.0垃圾回收机制的改进之3
    Silverlight 3引入了GPU加速的特性
    java 字符串
    JAVA 容器
    JAVA 反转链表
    JAVA 自定义比较器
    JAVA 类相关知识
    vscode 输出中文乱码
  • 原文地址:https://www.cnblogs.com/anjingdian/p/15408512.html
Copyright © 2011-2022 走看看