如何通俗地解释RESTful?

如题,能否通俗解释一下,及其应用场景,优点,为何使用RESTful?

阅读 10.7k
11 个回答

题主所说的RESTFul,其中的REST实际上应该是ReST:Representational State Transfer的缩写,具体解释起来应该是:

  • Representational的意思是表现形式

  • State Transfer的意思是状态转换

所以RESTful的含义是资源通过状态转换的一种表现形式。具体一点说,资源通过URL来定位,通过POST,GET,PUT,PATCH,DELETE等方法来操作,完成操作后通过HTTP的状态码2xx/4xx来完成状态的转换

先来说URL

其中资源指的就是URL。1楼答案表达的意思差不多,URL是用来定位资源的,但是1楼给出的方法也不是RESTful的方法。RESTful规范中的URL,通俗一点可以理解为与关系数据库中的表结构一一对应。也就是说URL中只包含名词+资源id,还是借用1楼的例子,如果老虎的id是10086,那么表示老虎的URL就应该是:

/animals/10086

对于访问URL的客户端或浏览器来说,不存在“动物园这么大,我找不到”的情况:既然知道id是10086,就可以拼接出完整的URL。如果需要表现资源之间的层级关系,比如一个动物园分成了4个区域,每个区域有自己的id,老虎在第3区,就应该这么表示:

/zones/3/animals/10086

Query用作资源的筛选

但是如果客户端不知道老虎的id是10086,想搜索老虎怎么办呢?刚才说了RESTful通俗一点可以理解为与关系数据库中的表结构一一对应,那么我们如果访问/animals应该获得的是数据库中animals这个表的所有记录,这么多记录里面找老虎确实不方便,但我们知道老虎类型为爬行,腿的数目为4,就可以这么筛选:

GET /animals?type=crawl&leg_num=4

这里的query:?type=crawl&leg_num=4就起到了筛选作用,我们就可以得到一个数据库中animals表的子集,其中包含了id为10086的老虎。

HTTP方法

同样的,HTTP方法不表示对页面或者代码的操作,而是对资源的操作。GET方法表示获取URL对应的资源,POST/PUT方法表示新建1条资源,PATCH方法表示对URL对应资源的部分内容进行修改,DELETE表示删除URL对应的资源。

优点和应用场景

综合上面所说的,RESTful的优点:

  • 不需要解释即明白某个接口设计的意图

  • 接口和资源一一对应,方便写代码,甚至有一些工具(例如sandman)能根据数据库的表结构生成对应的RESTful代码

  • 方便做权限控制,例如只允许用户访问自己上传的文件(假设这个文件的URL是/users/123/files/456),此时URL里面已经包含了这个用户的id,不必再通过其他方式反查

  • 为前端提供足够的灵活性

  • 在API升级过程中URL的改动较少,减少版本管理的工作量

因此需要访问RESTful API的场景:

  • 需要对数据进行灵活管理的Web页面

  • 手机客户端的开发

参考

  1. 理解RESTful架构

  2. RESTful API 设计最佳实践

翔逼今年6岁
只认识数字
几个汉字(四条腿,两条腿,飞,游泳,爬行)

放假啦,`宝哥`带`翔逼`去动物园。

动物园 - No RESTful
翔逼宝哥~老虎在哪呀?
宝哥:在第10086号笼子。
翔逼:啊咧咧?动物园怎么大,我找不到?
宝哥:用脚找呗~
翔逼:啊咧咧?欺负人~


动物园 - RESTful
翔逼:宝哥~老虎在哪呀?
宝哥:到门上写爬行的入口。
翔逼:啊咧咧?然后呢?
宝哥:进去后,到门上写着四条腿的入口。
翔逼:啊咧咧?我到了,现在呢?
宝哥:到笼子编号是2号的笼子,就能看到了。
翔逼:啊咧咧?找到了,老虎好帅啊~~~

通俗点说就是一种接口规范

通俗的讲就是设计模式,就是在这种情况下,这样设计 web API 要比那样设计要好。

楼上两层说的相当于没说

新手上路,请多包涵

同意2楼,接口规范

新手上路,请多包涵

把每一个uri都抽象成一个资源
通过http的方法(get/put/delete/post)来实现资源的增删改查,通过http的response code来定义资源操作状态

如果有兴趣的话,去看RESTful发明者最初的论文,会发现RESTful本质上是一种架构。一言两语是解释不清的,建议通读一本书,比如RESTful Web Services

简单来说, rest把系统想象为很多资源的集合,然后通过统一的接口去操作这些资源。 这里说的统一的接口的

意思是你提供给外部(客户端)去操作任何一个资源的方式(方法)应该是一样的, 这应该就是rest的核心,

当然他还有其他细致的规范,比方说无状态。

落实到http协议上, 服务器上面的资源,通过http get,post,delete,put 请求去操作这些资源。

也就是说我们平时使用过的http res只是rest其中一种方式

就是这么回事。

ruby里面写restful风格比较爽

文件 文件夹

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏