产品经理技术脑:RESTful API

RESTful架构,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。Fielding是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。

Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。对这个词组的翻译是"表现层状态转化"。

如果有架构成功符合了REST原则,则称它为RESTful架构。

什么是RESTful架构

理解Representational State Transfer词组是什么意思,就能明白RESTful是一种什么样的架构。

Representational State Transfer即"表现层状态转化",完整表达是“资源表现层状态转化”

  • 资源

资源指网络上的一个实体,或者说是网络上的一个具体信息。

它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。可以用一个URI(统一资源标识符)指向它,每种资源对应一个特定的URI。

要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

资源的例子

↘某用户的手机号码

↘某用户的个人信息

↘最多用户订购的GPRS套餐

↘两个产品之间的依赖关系

↘某用户可以办理的优惠套餐

↘某手机号码的潜在价值

URI(统一资源标识符)的例子:

↘http://www.pexue.com/

  • 表现层(Representation)

我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。"资源"是一种信息实体,它可以有多种外在表现形式。

如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

  • 状态转化(State Transfer)

访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。互联网通信协议HTTP协议,是一个无状态协议。

这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。


客户端用到的手段是HTTP协议。具体来说是HTTP协议里的4个操作,GET、POST、PUT、DELETE。它们分别对应四种基本操作:

↘GET用来获取资源,

↘POST用来新建资源(也可以用于更新资源),

↘PUT用来更新资源,

↘DELETE用来删除资源。

  • GET,DELETE,PUT和POST的典型用法

↘GET

获取表示

变更时获取表示(缓存)

200(OK) - 表示已在响应中发出

204(无内容) - 资源有空表示

301(Moved Permanently) - 资源的URI已被更新

303(See Other) - 其他(如,负载均衡)

304(not modified)- 资源未更改(缓存)

400 (bad request)- 指代坏请求(如,参数错误)

404 (not found)- 资源不存在

406 (not acceptable)- 服务端不支持所需表示

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务端当前无法处理请求

  • POST

使用服务端管理的(自动产生)的实例号创建资源

创建子资源

部分更新资源

如果没有被修改,则不过更新资源(乐观锁)

200(OK)- 如果现有资源已被更改

201(created)- 如果新资源被创建

202(accepted)- 已接受处理请求但尚未完成(异步处理)

301(Moved Permanently)- 资源的URI被更新

303(See Other)- 其他(如,负载均衡)

400(bad request)- 指代坏请求

404 (not found)- 资源不存在

406 (not acceptable)- 服务端不支持所需表示

409 (conflict)- 通用冲突

412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

415 (unsupported media type)- 接受到的表示不受支持

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务当前无法处理请求

  • PUT

用客户端管理的实例号创建一个资源

通过替换的方式更新资源

如果未被修改,则更新资源(乐观锁)

200 (OK)- 如果已存在资源被更改

201 (created)- 如果新资源被创建

301(Moved Permanently)- 资源的URI已更改

303 (See Other)- 其他(如,负载均衡)

400 (bad request)- 指代坏请求

404 (not found)- 资源不存在

406 (not acceptable)- 服务端不支持所需表示

409 (conflict)- 通用冲突

412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

415 (unsupported media type)- 接受到的表示不受支持

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务当前无法处理请求

  • DELETE

删除资源

200 (OK)- 资源已被删除

301 (Moved Permanently)- 资源的URI已更改

303 (See Other)- 其他,如负载均衡

400 (bad request)- 指代坏请求

404 (not found)- 资源不存在

409 (conflict)- 通用冲突

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务端当前无法处理请求

RESTful架构特色

符合RESTful标准的架构,应具备这些特征:

  • 资源

资源总是以一定的格式来表现自己。文本用txt、html;图片用JPG、JPEG等等。而JSON是RESTful API中最常用的资源表现格式。

  • 统一接口

对于业务数据的CRUD,RESTful 用HTTP方法与之对应。

  • URI(统一资源标识符)

它可以唯一标识一个资源,要注意的是,URL(统一资源定位符)是一种URI,因为它可以唯一标志资源。但URL != URI。应该说URL 是URI的子集。因为URL使用路径来唯一标识资源,这只是唯一标识资源的一种方式。还可以用一个唯一编号来标识资源,如example.html.fuce2da23。只不过这种方式并不被广泛使用。总之,要在概念上对URL和URI有所区分。

  • 无状态

无状态是指所有资源都可以用URI定位,而且这个定位与其他资源无关,不会因为其他资源的变动而变化。这里引入一个幂等性的概念:无论一个操作被执行一次还是多次,执行后的效果都相同。比如对某资源发送GET请求,如果访问一次和访问十次获得的数据一样,那么就说这个请求具有幂等性。

  • URL中只能有名词,不能出现动词

因为在REST要求对资源的操作由HTTP 方法给出,而方法是由HTTP 请求报文头部给出的,自然不需要在URL中暴露操作方式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值