表现层状态转换

表现层状态转换英语Representational State Transfer缩写REST)是Roy Thomas Fielding博士于2000年在他的博士论文[1]中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。符合或兼容于这种架构风格(简称为 REST 或 RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。因此表现层状态转换提供了在互联网络的计算系统之间,彼此资源可交互使用的协作性质(interoperability)。相对于其它种类的网络服务,例如 SOAP服务则是以本身所定义的操作集,来访问网络上的资源。

当前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAPXML-RPC相比更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务运行图书查询;雅虎提供的Web服务也是REST风格的。

要点及标准[编辑]

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTPURI,和XML以及HTML这些现有的广泛流行的协议和标准。

  • 资源是由URI来指定。
  • 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
  • 通过操作资源的表现形式来操作资源。
  • 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式,例如JSON。

可重新表达的状态迁移的特征[编辑]

  • 统一接口(Uniform Interface)

1. 以资源为基础

每个资源都可以通过URI访问到。

也就是一个个可以认知的资源,比如文档,音乐,视频等信息,都可以通过唯一的URI确定

2. 通过重表达的客户端可以管理原资源

就是我们通过客户端可以修改原资源的状态

3. 返回信息足够描述自己

这样重表达的客户端可以知道如何处理

4. 超媒体是应用状态的引擎

处理以超媒体为基础的状态变化

  • Stateless

无状态

  • Cacheable

可缓存

  • Client-Server

客户服务器分离模式,任何一个客户端与服务器都是可替换的

  • Layered System

分层的系统,客户端不知道他联系的是不是最终服务器

  • Code on Demand (optional)

服务器可以将能力扩展到客户端,如果客户端可以执行的话。这个功能是可选择的。

REST架构的约束条件[编辑]

REST架构风格最重要的架构约束有6个[2]

  • 客户端-服务器(Client-Server)

客户端-服务器结构约束的目的是将客户端和服务器端的关注点分离. 将用户界面所关注的逻辑和数据存储所关注的逻辑分离开来有助于提高用户界面的跨平台的可移植性.通过简化服务器模块也有助于服务器模块的可扩展性.

  • 无状态(Stateless)

服务器不能保存客户端的信息, 每一次从客户端发送的请求中, 要包含所有的必须的状态信息, 会话信息由客户端保存, 服务器端根据这些状态信息来处理请求. 服务器可以将会话状态信息传递给其他服务, 比如数据库服务, 这样可以保持一段时间的状态信息, 从而实现认证功能. 当客户端可以切换到一个新状态的时候发送请求信息. 当一个或者多个请求被发送之后, 客户端就处于一个状态变迁过程中. 每一个应用的状态描述可以被客户端用来初始化下一次的状态变迁.

  • 缓存(Cacheability)

如同万维网一样, 客户端和中间的通讯传递者可以将响应缓存起来. 响应必须明确的或者间接的表明本身是否可以进行缓存,这可以预防客户端在将来进行请求的时候得到陈旧的或者不恰当的数据. 管理良好的缓存机制可以 减少客户端-服务器之间的交互, 甚至完全避免客户端-服务器交互, 这进一步提了高性能和可扩展性。

  • 统一接口(Uniform Interface)

统一接口是 RESTful 系统设计的基本出发点. 它简化了系统的架构, 减少了耦合性, 可以让所有模块各自独立的进行改进. 对于统一接口的四个约束是:

  • 请求中包含资源的 ID (Resource identification in requests )
请求中包含了各种独立资源的标识, 例如, 在 Web 服务中的 URIs. 资源本身和发送给客户端的标识是独立. 例如, 服务器可以将自身的数据库信息以 HTML XML 或者 JSON 的方式发送给客户端, 但是这些可能都不是服务器的内部记录方式.
  • 资源通过标识来操作(Resource manipulation through representations)
当客户端拥有一个资源的标识, 包括附带的元数据, 则它就有足够的信息来删除这个资源.
  • 消息的自我描述性(Self-descriptive messages)
每一个消息都包含足够的信息来描述如何来处理这个信息. 例如, 媒体类型 (midia-type) 就可以确定需要什么样的分析器来分析媒体数据.
  • 用超媒体驱动应用状态 ( Hypermedia as the engine of application state (HATEOAS))
同用户访问 Web 服务器的 Home 页面相似,当一个 REST 客户端访问了最初的 REST 应用的 URI 之后, REST 客户端应该可以使用服务器端提供的链接,动态的发现所有的可用的资源和可执行的操作.随着访问的进行, 服务器在响应中提供文字超链接, 以便客户端可以得到当前可用的操作. 客户端无需用确定的编码的方式记录下服务器端所提供的动态应用的结构信息.
  • 分层系统(Layered System)

客户端一般不知道是否直接连接到了最终的服务器, 或者是路径上的中间服务器. 中间服务器可以通过负载均衡和共享缓存的机制提高系统的可扩展性,这样可也便于安全策略的部署.

  • 按需代码(Code-On-Demand,可选)

服务器可以通过发送可执行代码给客户端的方式临时性的扩展功能或者定制功能.例如Java Applet、Flash或JavaScript。

关于状态[编辑]

应该注意区别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每个连接的信息),而REST传输会包含应用的所有状态信息,因此可以大幅降低对HTTP连接的重复请求资源消耗。

应用于Web服务[编辑]

符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:

  • 直观简短的资源地址:URI,比如:http://example.com/resources
  • 传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSONXMLYAML等。
  • 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

下表列出了在实现RESTful API时HTTP请求方法的典型用途。

HTTP请求方法在RESTful API中的典型应用[3]
资源 GET PUT POST DELETE
一组资源的URI,比如https://example.com/resources 列出URI,以及该资源组中每个资源的详细信息(后者可选)。 使用给定的一组资源替换当前整组资源。 在本组资源中创建/追加一个新的资源。该操作往往返回新资源的URL。 删除整组资源。
单个资源的URI,比如https://example.com/resources/142 获取指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) 替换/创建指定的资源。并将其追加到相应的资源组中。 把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 删除指定的元素。

PUT和DELETE方法是幂等方法。GET方法是安全方法(不会对服务器端有修改,因此当然也是幂等的)。

不像基于SOAP的Web服务,RESTful Web服务并没有“正式”的标准[4]。这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但大部分RESTful Web服务实现会使用HTTPURIJSONXML等各种标准。

实现举例[编辑]

例如,一个简单的网络商店应用,列举所有商品,

GET http://www.store.com/products

呈现某一件商品,

GET http://www.store.com/products/12345

下单购买,

POST http://www.store.com/orders
<purchase-order>
  <item> ... </item>
</purchase-order>

REST的优点[编辑]

  • 可更高效利用缓存来提高响应速度
  • 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
  • 浏览器即可作为客户端,简化软件需求
  • 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
  • 不需要额外的资源发现机制
  • 在软件技术演进中的长期的兼容性更好

原文地址:https://www.cnblogs.com/max-hou/p/11916890.html

时间: 2024-11-09 05:15:31

表现层状态转换的相关文章

REST --- Representational State Transfer --- 表现层状态转化

引用:阮一峰的网络日志 如果一个架构符合REST原则,就称它为RESTful架构. 要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义. 如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设计. 一.资源(Resources) REST的名称"表现层状态转化"中,省略了主语."表现层"其实指的是"资源"(Resources)的&qu

一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构

表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的DAO层就是将访问数据库的代码,数据库层是数据存储与管理的代码 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO. VO,值对象

面向对象——三层架构(表现层、业务层、持久层)

三层架构:即表现层.业务层.持久层. ① 持久层:采用DAO模式,建立实体类和数据库表映射(ORM映射).也就是哪个类对应哪个表,哪个属性对应哪个列.持久层 的目的就是,完成对象数据和关系数据的转换. ② 业务层:采用事务脚本模式.将一个业务中所有的操作封装成一个方法,同时保证方法中所有的数据库更新操作,即保证同时成 功或同时失败.避免部分成功部分失败引起的数据混乱操作. ③ 表现层:采用MVC模式. M称为模型,也就是实体类.用于数据的封装和数据的传输. V为视图,也就是GUI组件,用于数据的

少一些套路,多一些真诚 &mdash;&mdash;groovy消灭表现层套路

  初次认识groovy是在2009年,当时看了Manning出版的<Groovy in Action 1st Edition>,对groovy这个语言的交互性shell,以及灵活的语法留下了深刻的印象,但限制于自己对脚本语言的特性了解甚少,社区基础的薄弱,以及所谓java is best的年少轻狂,没有进行实际应用,只是作为一种兴趣的萌芽种在了知识的土壤里.   转眼间到了2016年9月,突然在Manning网站上发现一本似曾相似的书籍-<Groovy in Action 2nd Ed

TCP 连接建立和断开,以及状态转换

1. TCP报文结构 TCP是一种可靠.面向连接.全双工的传输层协议,其报文格式如下所示:      源端口.目的端口:16位长.标识出远端和本地的端口号.     顺序号:32位长.表明了发送的数据报的顺序.     确认号:32位长.希望收到的下一个数据报的序列号.     TCP协议数据报头长度,因为TCP首部长度不固定.     头长:4位长.表明TCP头中包含多少个32位字.接下来的6位未用. ACK:ACK位置1表明确认号是合法的.如果ACK为0,那么数据报不包含确认信息,确认字段被

【转载】 JAVA三层架构,持久层,业务层,表现层的理解

JAVA三层架构,持久层,业务层,表现层的理解 转载:http://blog.csdn.net/ljf_study/article/details/64443653 SSH: Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts: Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求. 在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发. (View:沿用JSP,HTTP,Form,Tag,Resourse : Co

hibernate 增改查后对象的三种状态转换

this.getSession().update(obj); this.getSession().merge(obj); this.getSession().saveOrUpdate(obj);1. update 和 merge的区别 首先在执行更新操作的时候,两者都必须要有id update是直接执行update 语句,执行后状态为持久化状态 而merge则不一样: 1. 如果session中有与之对应的对象,也就是主键相同,则会把要保存的obj的值copy给session中的对象,然后upd

结构层HTML + 表现层CSS

结构层HTML + 表现层CSS 一.HTML5 超文本标记语言 什么是HTML5 用于取代1999年所定制的HTML4.01和XHTML1.0标准的html标准版本 强化Web网页的表现性能,其次追加了本地数据库等Web应用的功能 是包括HTML.CSS.JavaScript在内的一套技术组合 特性[优势]:各大浏览器厂商的支持  跨平台  兼容性  市场需求 HTML5结构元素 之前的版本中 开发者不同,ID的命名也不同导致代码可读性差 不能很好的定位标记,明确某标记在页面中的位置和作用 代

20160402_TCP连接的建立、终止和状态转换

原题: 以下不属于tcp连接断开的状态是? TIME_WAIT FIN_WAIT_1 SYNC_SENT FIN_WAIT_2 答案:SYNC_SENT -------------------------------------------------------------------------------- 本题知识点:计算机网络 TCP连接的建立:     下述步骤建立一个TCP连接:    1.服务器必须准备好接受外来的连接.这通过调用socket.bind和listen函数来完成,称