如何通俗地解释RESTful?

发布于 2022-09-03 09:39:54 字数 41 浏览 17 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

长不大的小祸害 2022-09-10 09:39:54

题主所说的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 设计最佳实践

献世佛 2022-09-10 09:39:54

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

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

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


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

恍梦境° 2022-09-10 09:39:54

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

长发绾君心 2022-09-10 09:39:54

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

惟欲睡 2022-09-10 09:39:54

楼上两层说的相当于没说

鹿港小镇 2022-09-10 09:39:54

同意2楼,接口规范

梦巷 2022-09-10 09:39:54

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

最丧也最甜 2022-09-10 09:39:54

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

三寸金莲 2022-09-10 09:39:54
简单来说, rest把系统想象为很多资源的集合,然后通过统一的接口去操作这些资源。 这里说的统一的接口的

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

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

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

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

就是这么回事。

凝望流年 2022-09-10 09:39:54

ruby里面写restful风格比较爽

古镇旧梦 2022-09-10 09:39:54

文件 文件夹

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文