如何清楚的理解REST以及Restful

本文介绍了REST的概念及其核心思想,并对比了传统API设计与RESTful风格的不同之处,同时阐述了RESTful API的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 1、什么是REST?

看很多对REST的解释就是REpresentational State Transfer,直接翻译为:表现层状态转移。这个概念看上去很是懵逼。
以下是自己看了网上一些通俗的解释整理下来的:
全称是Resource Representational State Transfer,通俗的来讲就是:资源在网络中以某种表现形式进行状态转移。
要想理解这句话首先需要弄清楚什么是资源

Resource:资源,即数据(前面说过网络的核心)。比如网络上的所有事物都被抽象为资源。资源可以是实体(例如手机号码),也可以只是一个抽象概念(例如价值) 。

下面是一些资源的例子:
某用户的手机号码
某用户的个人信息
最多用户订购的商品套餐
两个产品之间的依赖关系
某用户可以办理的优惠套餐
某手机号码的潜在价值

每个资源都有一个唯一的资源标识符URI,要获取这个资源,访问它的URL就可以,因此URL就成了每一个资源的地址。

Representational:资源的某种表现形式,资源具有多种表现形式,比如用JSON,XML,JPEG等;
State Transfer:资源的状态变化。通过HTTP动词表达。

所以概括来讲:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述对资源的操作。

一个url就是一个资源,所有的操作都是对资源的更改而言的角度上啊。​​​​​​

  • 2、什么是RESTful
    基于REST构建的API就是Restful风格。

REST,名词,实际上只是一种设计风格,它并不是标准。所以你可以看到网上一大堆的各种最佳实践,设计指南,但是没有人说设计标准。

RESTful,形容词,指实现了 REST规范的系统,如实现了REST规范的Web API就叫RESTful API。
REST 是面向资源的,这个概念非常重要,而资源是通过 URL 进行暴露。

在Restful之前的操作:
http://127.0.0.1/user/query/1 GET  根据用户id查询用户数据
http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息

 

RESTful用法:
http://127.0.0.1/user/1 GET  根据用户id查询用户数据
http://127.0.0.1/user  POST 新增用户
http://127.0.0.1/user  PUT 修改用户信息

REST是Roy Thomas Fielding在他2000年的博士论文中提出的。通俗点讲,这个设计的初衷就是作者要告诉我们,HTTP协议是这样设计的,别用错了。原因是http本质就是对资源的各种操作,资源用URL定位,操作用method表示,但很多应用都是把操作放到URL表示,那method有何意义?就是所有的Url本质来讲,都应该是一种资源。一个独立的Url地址,就是对应一个独一无二的资源。

 

  • 3、RESTful API有哪些特点

(1)基于“资源”,数据也好、服务也好,在RESTFul设计里一切都是资源。REST 是面向资源的,而资源是通过 URL 进行暴露。

URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,操作是通过 HTTP动词来体现,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。

在Restful之前的操作:
http://127.0.0.1/user/query/1 GET  根据用户id查询用户数据
http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息

RESTful用法:
http://127.0.0.1/user/1 GET  根据用户id查询用户数据
http://127.0.0.1/user  POST 新增用户
http://127.0.0.1/user  PUT 修改用户信息

(2)无状态。一次调用一般就会返回结果,不存在类似于“打开连接-访问数据-关闭连接”这种依赖于上一次调用的情况。

所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。

(3)URL中通常不出现动词,只有名词URL语义清晰、明确。

(4)使用HTTP的GET、POST、DELETE、PUT来表示对于资源的增删改查

REST很好地利用了HTTP本身就有的一些特征,如HTTP动词、HTTP状态码、HTTP报头等等
REST API 是基于 HTTP的,所以你的API应该去使用 HTTP的一些标准。这样所有的HTTP客户端(如浏览器)才能够直接理解你的API(当然还有其他好处,如利于缓存等等)。REST 实际上也非常强调应该利用好 HTTP本来就有的特征,而不是只把 HTTP当成一个传输层这么简单了。

RESTful架构风格规定,数据的元操作,即CRUD,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源)PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值