一个资源

Download Report

Transcript 一个资源

REST分享交流
由来
• 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?news
id=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
文档。也就是说我们要获取“同一个资源
的不同表现形式的数据”。
• 在 REST 中,不管是获取的 html 文档还是
XML 文档,都是用同一个 URI,就是
http://210.28.216.201:8080/bysj/
themes/wuxi 。
• 当我们用浏览器访问一个网址时,浏览器
会构造一个 HTTP 请求。这个请求有一个
头信息,其中包括了本次请求接受何种类
型的数据。
• 将用户界面和数据存储分离,提高用户界
面跨多个服务平台
• 一个好的架构应该可以很轻松的为不同的
请求返回不同格式的数据。