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

RESTful是什么

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

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

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

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

为什么使用RESTful

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

RESTful是无状态的,因此无论前端是什么设备,前端是什么状态,都可以无差别的请求资源,有利于后端实现分布式。

RESTful允许前端索取指定格式的信息,因此可以实现一套统一的API服务于不同的前端设备。

如何构建RESTful API

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

网址仅用来表示资源的名称,而不包括操作,因此只能由名词组成;但有些资源可能自带操作属性,比如转账,这时候我们应该将转账看成一种服务(名词),将转账的其他信息作为参数传递

二、对于资源的操作类型由HTTP动词表示

常用的四种HTTP动词以及对应的SQL操作。

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

三、统一的返回结果

针对不同操作,服务器向用户返回的结果应该符合以下规范。

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

四、返回正确的状态码

常用状态码

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

五、允许通过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相当于让大家见识了一下当年规范制定者们的远见卓识,就像小时候不听话的孩子在长大的某一天里突然想起来长辈曾经的教诲一样。

RESTful学习及应用的更多相关文章

  1. RESTful学习记录

    1.1 什么是RESTful RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. RESTful(即Representat ...

  2. RESTful学习笔记

    作为一名只有几个月IT自学经历的人,在接受新知识的时候总是想找到浅显易懂的方式去理解,但往往却很难找到相关的文章,大部分都是针对具有一定经验的开发人员,因此在看了很多相关的文章才对RESTful架构有 ...

  3. RESTful学习文档

    视频讲解 http://www.tudou.com/programs/view/PaVOGeK_BOY/ 文档说明 http://www.csdn.net/article/2013-06-13/281 ...

  4. 慕课网Java高并发秒杀学习

    课程地址:http://www.imooc.com/learn/587 一个很好:spring,springMVC,mybatis,bootstrap,jQuery,mysql,Restful学习案例 ...

  5. RESTful接口设计原则/最佳实践(学习笔记)

    RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...

  6. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)

    很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...

  7. Java Restful Web Service 学习指南

    Restful是一种架构style,目前常说的有restful web service, resultful http.现在热搜榜的微服务,大多数会采用Restful方式. JAX-RS 作为一个Re ...

  8. DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等

    DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...

  9. Flask 学习篇一: 搭建Python虚拟环境,安装flask,并设计RESTful API。

    前些日子,老师给我看了这本书,于是便开始了Flask的学习 GitHub上的大神,于是我也在GitHub上建了一个Flask的项目. 有兴趣可以看看: https://github.com/Silen ...

随机推荐

  1. 代码规范:idea上添加阿里巴巴Java开发插件

    在一个项目中,不可缺少的是书写代码的规范,没有好的代码规范约束,大家各写各的,十分不利于代码的维护与修改.     首先来看看如何在idea上添加这个插件: 直接上图 点击右边的蓝色按钮就可以安装了, ...

  2. 当心Azure跨区域数据传输产生额外费用

    最近同事发现Azure上一台虚拟机的费用环比增加了一部分.后面仔细检查发现费用来自数据传输, 因为这是早期部署的一台Azure虚拟机(Iaas),我们在本地生成备份,然后通过AzCopy到存储账号的B ...

  3. C#异步编程----Thread

    一.问题由来 多线程能实现的基础: 1.CPU运行速度太快,硬件处理速度跟不上,所以操作系统进行分时间片管理.这样,宏观角度来说是多线程并发 ,看起来是同一时刻执行了不同的操作.但是从微观角度来讲,同 ...

  4. kubernetes 安装备注

    一.安装环境 阿里云:centos 7.3 master节点:外网IP(116.62.205.90).内网IP(172.16.223.200) node节点:外网IP(116.62.212.174). ...

  5. 探究 CSS 混合模式\滤镜导致 CSS 3D 失效问题

    今天在写一个小的 CSS Demo,一个关于 3d 球的旋转动画,关于 CSS 3D,少不了会使用下面这几个属性: { transform-style: preserve-3d; perspectiv ...

  6. T5大牛带你解析:如何实现分布式技术

    1.分布式事务 2. 分布式锁 Java 原生 API 虽然有并发锁,但并没有提供分布式锁的能力,所以针对分布式场景中的锁需要解决的方案. 分布式锁的解决方案大致有以下几种: 基于数据库实现 基于缓存 ...

  7. ubuntu 16.04安装perf

    ljc@ubuntu:~$ perf 程序“perf”尚未安装. 您可以使用以下命令安装: sudo apt install linux-tools-common ljc@ubuntu:~$ sudo ...

  8. jquery删除内容是动态修改序号

    如图,点击删除图标的时候要删除当前的一条记录,同时界面上的序号要动态的排列好 以下是html结构: jquery实现思路: 首先,需要获取到当前要删除盒子的序号$indexCur,然后遍历父盒子,取出 ...

  9. InkImageDataSetGenerator-开源一个可用于机器学习的书写轨迹图片生成的小工具

    这是一个简单易用的图片数据集生成小工具,基于OpenCV和UWP Ink API,它可以根据指定的手写轨迹生成一系列各个角度的图片.每张图片的尺寸和总体数量都是可以指定的,均存放在统一的生成目录中.h ...

  10. 前后端同学,必会的Linux常用基础命令

    无论是前端还是后端同学,一些常用的linux命令还是必须要掌握的.发布版本.查看日志等等都会用到.以下是我简单的总结了一些简单又常用的命令,欢迎大家补充.希望能帮助到大家 本文首发于公众号 程序员共成 ...