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

posted @ 2021-10-14 21:14  安静点--  阅读(927)  评论(0编辑  收藏  举报