REST风格的优势是什么?
21 个回答
阮一峰的那篇文章我认为没有讲到实质,他能让人大概知道Restful是啥,但无法令人信服地知道REST是一种和以往不同的、在一定场景下有一定优势的架构方式
REST的全称在文章里已经有了,其中的核心是第一个字母R,即资源(Resource)
好吧第一个字母是Representational,但核心真的是资源
REST的核心在于,当你设计一个系统的时候,资源是第一位的考虑,你首先从资源的角度进行系统的拆分、设计,而不是像以往一样以操作为角度来进行设计
我们平时搞系统是这样的:
- 有新建用户功能
- 新建用户需要一个URL
- 往这个URL发送的数据要定义好
- 开始写后端和前端
这是以操作为第一位的设计方法,首先我们确认了一个操作,然后围绕这个操作把周边需要的东西建设好,这种方式当然可以架构出一个系统,甚至是一个好系统,但是偶尔会有些问题:
- 操作之间是会有关联,你的设计容易变成“第2个操作要求第1个操作进行过”,这种关系多起来你的系统就乱了
- 你的URL设计会缺乏一致性
- 操作通常被认为是有副作用(Side Effect)的,所以很少有人基于操作去设计缓存之类的东西
基于这些问题,我们的另一种方法是基于资源的角度来搞,但这个太难了我至今其实没想明白到底是怎么搞的,但基于资源会有一些好处:
- 各个资源虽然可能有关联,但依旧是能够简单地切掉这些关联导致相互独立的,所以不会有非常乱的耦合性
- 对资源的操作就这么几种,所以很容易设计一致的URL
- 我们明白对资源的读操作是无副作用的,所以能玩缓存
但其实现在99%说自己是REST的情况,就是改了个URL风格,用了用PUT和POST,根本没有明白REST是一个什么,也没有按REST的思想来指导设计,在我看来纯粹就是在作秀
要说自己会REST,我觉得至少回答2个问题:
- 对于用户登录和用户退出这两个业务需求,REST指导下的架构和设计如何满足
- 批量的删除、修改、新增如何满足
评论区吐槽被人将军,我把我的答案也写上吧,还是以前写的一段话,如果没有同感的话,建议答主还是去看REST那篇论文和Roy Fielding写的一篇吐槽博文
~~~~~~~~~我的回答~~~~~~~~~~
【原文在:
谈谈对REST架构的理解】
REST本身不是架构,只是一种架构风格,理解它的时候要参考这个架构风格出现的环境所施加的约束条件。
REST的目的是“建立十年内不会过时的软件系统架构",所以它具备三个特点:
1. 状态无关 —— 确保系统的横向拓展能力
2. 超文本驱动,Fielding的原话是”hypertext-driven" —— 确保系统的演化能力
3. 对 resource 相关的模型建立统一的原语,例如:uri、http的method定义等 —— 确保系统能够接纳多样而又标准的客户端
从另外一个角度看,第一条保证服务端演化,第三条保证客户端演化,第二条保证应用本身的演化,这实在是一个极具抽象能力的方案。