先来点官方介绍,REST全称是Representational State Transfer,中文意思是表述性状态转移,指的是一组架构约束条件和原则,REST架构风格并非绑定在HTTP上,只不过目前HTTP是惟一与REST相关的实例,而符合REST风格的架构,就能够被成为RESTful.html
恩,很正式,但是对于理解其真正的含义帮助不大,下面咱们来看看如何经过HTTP实现REST.api
有个好东西,流行了十几年,忽然有一天,这东西的创造者跑出来讲,大家怎么瞎玩,这东西哪里是这么用的,因而:世界崩塌了~~~服务器
HTTP是互联网使用最多的协议,但是他的创始人说,绝大多数使用者都误解了HTTP的设计初衷,都在错误的使用HTTP.为何这么说呢,看下面的API格式对比restful
接口描述 | 传统API---[错误用法] | RESTful API---[正确用法] |
新增用户 | http://127.0.0.1/user/save POST架构 |
http://127.0.0.1/user POST 异步 |
删除用户 | http://127.0.0.1/user/delete GET/POST spa |
http://127.0.0.1/user DELETE .net |
修改用户信息 | http://127.0.0.1/user/update POST设计 |
http://127.0.0.1/user PUT 3d |
根据ID获取用户信息 | http://127.0.0.1/user/query/1 GET |
http://127.0.0.1/user/1 GET |
经过上面的对比,咱们很容易发现如下问题:
1.URL的不一样
URL的定义是统一资源定位符,从名字就能看出,URL的关注点是资源,因此它不该该包含动词,在对比表中咱们能够看见,传统API的URL中包含了操做用户的行为(上例中的描述已经算是规整了,由于接口相对简单,现实中每每存在着杂乱不堪的URL),而RESTful API则没有,只是使用user来表述这是用户信息资源
2.HTTP动词使用
传统API中,咱们只用到了GET和POST,但是HTTP动词可不止两个,大家觉得另外几个是干吗用的?因此,正确使用HTTP动词来描述API针对于资源所要进行的行为,比较常见的是POST,DELETE,PUT,GET
上述表格右侧已经给出了基本的RESTful API示例,下面咱们来更加全面的了解REST设计细节:
关于API版本号:
能够放在URL中或者HTTP头信息中,我的倾向前者,更直观易懂
https://api.example.com/v1/
资源定位符:
URL中不能出现动词,只能出现名词,名词建议采用复数形式
https://api.example.com/v1/users
HTTP动词:
使用HTTP动词来表示资源操做意图
HTTP常见状态码:
使用HTTP状态码来反馈接口错误信息,不使用自定义返回信息(暂时没能说服我,HTTP状态码没法表达业务错误信息)
REST分级:
Level0:能够简单的理解成传统HTTP API
Level1:和Level0的区别是它的关注点换成了资源
Level2:本真RESTful,绝大多数的RESTful就是作到这一层,URL来表示资源,动词来表示行为
Level3:完美RESTful,又叫HATEOAS,核心思想就是资源有本身的状态,在不一样的状态下能执行的操做是不同的,即会在响应中加入相关的连接来引导客户端用户,而不须要查看文档
总结:REST是一种规则约束,是一种风格,是一种思想,但不是一种规范,固然也就不存在彻底的RESTful,理解REST,能帮助咱们更合理,更正确的使用HTTP规范,而非像以往那样只是用于传输.
参考资料地址:
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
https://blog.csdn.net/qq_21383435/article/details/80032375
https://zhuanlan.zhihu.com/p/30396391?group_id=937244108725641216
https://blog.csdn.net/chenxiaochan/article/details/73716617