RESTful学习及应用

原文转自前端路上,转载请注明出处:http://refined-x.com/2017/09/22/RESTful学习及应用/前端

RESTful是什么

RESTful是一种API架构,符合REST设计原则的API均可以被称为RESTful,REST的全称是Representational State Transferios

REST的核心原则是后端将资源发布为URI,前端经过URI访问资源,并经过HTTP动词表示要对资源进行的操做,典型的RESTful API长这样:web

POST /artical           //增长一篇文章
DELETE /artical/1       //删除id为1的文章
PUT /artical/1          //修改id为1的文章
GET /articals/1         //查询id为1的文章

 

这里须要明确一个概念:资源,后端提供的全部内容均可以被定义为资源,前端用户的一切行为,本质都是与一系列后端资源互动的结果。从这个角度来说,前端的意义就是链接用户与资源,使用户能以最简单的方式调度后端资源,并将调度结果以用户最容易接受的方式呈现出来。npm

为何使用RESTful

先后端分离的本质是先后端以API为界限进行开发解耦,因此先后端分离的副产品是大量的API,采用RESTful架构可让API的表现力更强,更易于被理解;对于接口开发来讲,RESTful风格也更易于扩展,这对于大型项目很是重要。axios

RESTful是无状态的,所以不管前端是什么设备,前端是什么状态,均可以无差异的请求资源,有利于后端实现分布式。后端

RESTful容许前端索取指定格式的信息,所以能够实现一套统一的API服务于不一样的前端设备。数组

如何构建RESTful API

1、每一个网址表明一种资源,网址中只能有名词

网址仅用来表示资源的名称,而不包括操做,所以只能由名词组成;但有些资源可能自带操做属性,好比转帐,这时候咱们应该将转帐当作一种服务(名词),将转帐的其余信息做为参数传递服务器

2、对于资源的操做类型由HTTP动词表示

经常使用的四种HTTP动词以及对应的SQL操做。架构

GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
DELETE(DELETE):从服务器删除资源。

 

3、统一的返回结果

针对不一样操做,服务器向用户返回的结果应该符合如下规范。前后端分离

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档

 

4、返回正确的状态码

经常使用状态码

200 :服务器成功返回用户请求的数据
400 :用户发出的请求有错误
401 :表示用户没有权限
403 : 表示用户获得受权(与401错误相对),但访问被禁止的
404 :用户发出的请求针对的是不存在的记录
500 :服务器发生错误,用户没法判断发出的请求是否成功

 

5、容许经过HTTP内容协商

客户端能够经过Accept头请求一种特定格式的表述,服务端则经过Content-Type告诉客户端资源的表述形式。若服务器不支持,它应该返回一个HTTP 406响应,表示拒绝处理该请求。

一般项目中最经常使用的仍是直接预约为JSON格式。

web端的应用

目前最流行的web端AJAX类库当属axios,axios与RESTful完美兼容,主要体如今如下几个方面。

axios将HTTP动词直接封装为方法,正好对应RESTful的API风格,在RESTful架构中使用起来很是方便

axios.post(`/artical`, params)
axios.delete(`/artical/1`, params)
axios.put(`/artical/1`, params)
axios.get(`/artical/1`, params)

 

并且axios的返回数据包括响应正文和状态码等信息,配合拦截器很容易实现对RESTful API错误码的统一处理。

//错误处理
axios.interceptors.response.use(function(response) {
  return response;
}, function(error) {
  if (error.response) {
    switch (error.response.status) {
      case 400:
        
        break;
      case 401:
        
        break;
      case 403:
        
        break;
      ...
    }
  }
});

 

更多axios内容参考这里

最后

其实RESTful的绝大多数内容都是规范推荐的作法,没有什么新东西,只不过前几年后端MVC盛行的时期,没有这么重的API开发需求,在这方面就一切从简了,近来遇上先后端分离的东风,API设计又被你们重视起来了,重回规范的RESTful至关于让你们见识了一下当年规范制定者们的远见卓识,就像小时候不听话的孩子在长大的某一天里忽然想起来长辈曾经的教诲同样。

相关文章
相关标签/搜索