首页 > 代码库 > REST系统的特征

REST系统的特征

作者:小辉
链接:https://www.zhihu.com/question/28557115/answer/41268927
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

什么是 REST?

下面六条准则定义了一个 REST 系统的特征:

  • 客户-服务器(Client-Server),提供服务的服务器和使用服务的客户需要被隔离对待。
  • 无状态(Stateless),来自客户的每一个请求必须包含服务器处理该请求所需的所有信息。换句话说,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他请求中使用。
  • 可缓存(Cachable),服务器必须让客户知道请求是否可以被缓存。(Ross:更详细解释请参考 理解本真的REST架构风格 以及 StackOverflow 的这个问题 中对缓存的解释。)
  • 分层系统(Layered System),服务器和客户之间的通信必须被这样标准化:允许服务器和客户之间的中间层(Ross:代理,网关等)可以代替服务器对客户的请求进行回应,而且这些对客户来说不需要特别支持。
  • 统一接口(Uniform Interface),客户和服务器之间通信的方法必须是统一化的。(Ross:GET,POST,PUT.DELETE, etc)
  • 支持按需代码(Code-On-Demand,可选),服务器可以提供一些代码或者脚本(Ross:Javascrpt,flash,etc)并在客户的运行环境中执行。这条准则是这些准则中唯一不必必须满足的一条。(Ross:比如客户可以在客户端下载脚本生成密码访问服务器。)
什么是一个 RESTful 的 Web Service?

REST 架构最初被设计出来用于 World Wide Web 使用的 HTTP 协议。

RESTful Web Service 的核心概念在于对 Resources 的抽象。Resources 被 URIs (Uniform Resource Identifier) 表征。客户使用 HTTP 协议定义的方法发送请求给这些 URIs,然后相应的资源的状态就可能会发生变化。


HTTP 请求的方法是被专门设计出来以标准的方式影响给定资源的:

Get:从某种资源获取信息 (获取 order list)
Get:从某个资源获取信息 (获取 order #123)
POST:创建一个新资源 (根据请求中的数据创建一个新 order)PUT:更新一个资源 (根据请求中的数据更新 #order 为 123 的 order)
DELETE:删除一个资源 (删除 #order 为 123 的 order)

REST系统的特征