260 likes | 691 Vues
REST 分享交流. 由来. REST ( Representational state transfer ) 表象化状态转变 或者 表述性状态转移 Roy Fielding 在 2000 年他的博士论文中提出来的一种 软件架构 风格。. 到底是什么. REST 是一种设计风格。它不是一种标准,也不是一种软件,而是一种思想。 REST 通常基于使用 HTTP , URI ,和 XML 以及 HTML 这些现有的广泛流行的协议和标准。. 宗旨. 从资源的角度来观察整个网络
E N D
由来 • REST(Representational state transfer) 表象化状态转变 或者 表述性状态转移 • Roy Fielding在2000年他的博士论文中提出来的一种软件架构风格。
到底是什么 • REST是一种设计风格。它不是一种标准,也不是一种软件,而是一种思想。 • REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。
宗旨 • 从资源的角度来观察整个网络 网络上的所有事物都是资源,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表述。 • REST架构风格以资源为核心进行设计
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
架构约束 • 客户端和服务器结构 • 连接协议具有无状态性 • 能够利用Cache机制增进性能 • 统一接口 • 层次化的系统 • Code On Demand按需代码
一个简单扼要的定义 • REST定义了应该如何正确地使用(这和大多数人的实际使用方式有很大不同)Web标准,例如HTTP和URI。如果你在设计应用程序时能坚持REST原则,那就预示着你将会得到一个使用了优质Web架构的系统。 ----------Stefan Tilkov
关键原则 • 为所有资源定义ID • 将所有资源链接在一起 • 使用标准方法 • 资源多重表述 • 无状态通信
为所有资源定义ID • 资源是暴露给外界的接口,资源由URI标识,URI是资源的名词,也是资源在Web上的地址,对资源感兴趣的客户可以通过URI与资源交互。 • 在 REST 的定义中,一个 Web 应用总是使用固定的 URI 向外部世界呈现(或者说暴露)一个资源。 • URI 是英文 Uniform Resource Identifier 的缩写,中文翻译“通用资源标志符”。 • “通用资源标志符”是指唯一标识一个资源(xhtml 文件、图片、css 样式表)的字符串。
通过 REST 架构,Web 应用程序可以用一致的接口(URI)暴露资源给外部世界,并提供对资源的操作服务。这对于以资源为中心的 Web 应用来说非常重要。例如照片共享网站、用户社区等。
例子 http://www.jstvu.edu.cn/newslist.php?newsid=1 http://www.jstvu.edu.cn/newslist/1
将所有资源链接在一起 • 任何可能的情况下,使用链接指引可以被标识的事物(资源) • 例子 <news self="http://www.jstvu.edu.cn/newslist/1"> <image ref=" http://www.jstvu.edu.cn/images/1 "> </image></news>
Why is it called Representational State Transfer? • The Web is comprised of resources. A resource is any item of interest. For example, the Boeing Aircraft Corp may define a 747 resource. Clients may access that resource with this URL: • http://www.boeing.com/aircraft/747 A representation of the resource is returned (e.g., Boeing747.html). The representation places the client application in a state. The result of the client traversing a hyperlink in Boeing747.html is another resource is accessed. The new representation places the client application into yet another state. Thus, the client application changes (transfers) state with each resource representation --> Representational State Transfer!
使用标准方法 • 如果你在公共汽车上看到一个URI,你可以将它输入浏览器的地址栏中并回车——但是你的浏览器如何知道需要对这个URI做些什么呢? • 它知道如何去处理URI的原因在于所有的资源都支持同样的接口,一套同样的方法(只要你乐意,也可以称为操作)集合。在HTTP中这被叫做动词(verb),除了两个大家熟知的(GET和POST)之外,标准方法集合中还包含PUT、DELETE、HEAD和OPTIONS。
RESTful HTTP方案中的所有资源都继承自类似于这样的一个类: • class Resource • { Resource(URI u); • Response get(); • Response post(Request r); • Response put(Request r); • Response delete(); }
资源多重表述 • 什么是资源表述?它是一段对于资源在某一个特定时刻的状态描述,资源表述有多种格式,最常见的是HTML/XML/JSON纯文本。
无状态通信 • 服务器端不能保持除了单次请求之外的,任何与其通信的客户端的通信状态。 • 这样做的最直接的理由就是可伸缩性—— 如果服务器需要保持客户端状态,那么大量的客户端交互会严重影响服务器的内存可用空间。
目前的restful框架 • 目前宣称支持REST风格web service的Java框架包括以下这些: • Restlet • Jersey • RESTEasy(JBoss的), • CXF • Spring 3.0也支持REST了, • 还有国人做的一个轻量框架JRest4Guice • Php和python
理论上的REST • 很多人的理解和原作者有出入 • 并没有明确地区分HTTP、RESTful HTTP和REST • REST在本质上是一个可以被许多不同技术实现的高层次的风格
REST优势 • 使用REST的最佳的场景是对外提供公开的服务,也就是所谓的OpenAPI,也有的人认为RESt更适合资源导向的网站,像youtube这样的网站。 • REST 的真正价值在于 Web Services,而不是通过浏览器操作的应用程序。
目前restful的web应用 • Google的Gdata • 豆瓣的Open API • Amazon的S3等等都是REST的
对于课题restful的理解 • http://210.28.216.201:8080/bysj/ themes/wuxi指向毕设系统网站中类型为themes,名字为wuxi的资源。
我们用浏览器访问这个 URI,这个地址很可能会在服务器内部处理为 http://210.28.216.201:8080/bysj/ themes.jsp?school=wuxi这样的地址。 • 服务器根据 school 参数生成 html 文档返回给浏览器。浏览器看到的将可能是一个 html 文档。
假设客户端我们要获取的是XML或者Json文档。也就是说我们要获取“同一个资源的不同表现形式的数据”。假设客户端我们要获取的是XML或者Json文档。也就是说我们要获取“同一个资源的不同表现形式的数据”。 • 在 REST 中,不管是获取的 html 文档还是 XML 文档,都是用同一个 URI,就是 http://210.28.216.201:8080/bysj/ themes/wuxi 。
当我们用浏览器访问一个网址时,浏览器会构造一个 HTTP 请求。这个请求有一个头信息,其中包括了本次请求接受何种类型的数据。
将用户界面和数据存储分离,提高用户界面跨多个服务平台将用户界面和数据存储分离,提高用户界面跨多个服务平台 • 一个好的架构应该可以很轻松的为不同的请求返回不同格式的数据。