一篇文章带你搞懂什么是 REST 风格 URL

一、为什么要要引入 RESTful ?

因为在移动互联网真正到来之前,网页是前端后端融在一起的,比如之前的PHP,JSP等。

在之前的PC时代问题不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,

RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。
在这里插入图片描述

二、什么是 rest?

REST(英文: Representational State Transfer,简称 REST)描述了一个架构样式的网络系统,
比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种 Web 服务交互方案中, REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL 的处理还是对 Payload 的编码, REST 都倾向于用更加简单轻量的方法设计和实现。

REST 并没有一个明确的标准,而更像是一种设计的风格。它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格的网络接口.

restful 认为一切皆是资源, API 应该是对资源的状态的转化

具体来说就是:

  • 每一个URI都代表一种资源
  • 客户端和服务端之间,是传递这种资源的表现层
  • 客户端通过四个 HTTP 动词,对服务器端资源进行操作,实现表现层的状态转化

三、rest 的特点

(1)restful 的优点:它结构清晰、符合标准、易于理解、 扩展方便,所以正得到越来越多网站的采用。

(2)restful 的特性:

(1)资源(Resources) : 网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。

可以用一个 URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的 URI 就可以,因此 URI 即为每一个资源的独一无二的识别符

(2)表现层(Representation) : 把资源具体呈现出来的形式,叫做它的表现层,比如,文本可以用 txt 格式表现,也可以用 HTML 格式、 XML 格式、 JSON 格式表现,甚至可以采用二进制格式。

URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述

也可以称为消息的自描述行,资源的自描述性

(3)状态转化(State Transfer) : 每发出一个请求,就代表了客户端和服务器的一次交互过程。 HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。

因此,如果客户端想要操作服务器, 必须通过某种手段, 让服务器端发生“ 状态转化”。而这种转化是建立在表现层之上的,所以 就是 “ 表现层状态转化” 。

客户端用到的手段,只能是HTTP协议,具体说就是 HTTP协议里面,四个表示操作方式的动词: GET 、 POST 、 PUT、 DELETE。

它们分别对应四种基本操作: GET 用来获取资源,POST 用来新建资源, PUT 用来更新资源, DELETE 用来 删除资源。

具有这些特性的主要目的就是实现客户端无需借助任何文档既能调用所有的服务器资源

四、误区

(1)因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。

举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。

如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:

POST /accounts/1/transfer/500/to/2

正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:

(2)URI中加入版本号

http://www.example.com/app/1.0/foo

http://www.example.com/app/1.1/foo

http://www.example.com/app/2.0/foo

因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分:

Accept: vnd.example-com.foo+json; version=1.0

Accept: vnd.example-com.foo+json; version=1.1

Accept: vnd.example-com.foo+json; version=2.0

【参考】

【1】https://www.jianshu.com/p/0e0ed296d2a3
【2】https://www.cnblogs.com/wang-yaz/p/9237981.html
【3】http://www.ruanyifeng.com/blog/2011/09/restful.html
【4】https://www.cnblogs.com/xuxiuxiu/p/7736801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值