原文地址:http://brainstorm.iteye.com/blog/119963
REST介绍
REST架构风格是全新的针对Web应用的开发风格,是当今世界最成功的互联网超媒体分布式系统架构,它使得人们真正理解了Http协议本来面貌。随着REST架构成为主流技术,一种全新的互联网网络应用开发的思维方式开始流行。
REST是什么
REST是英文Representational State Transfer的缩写,中文翻译为“表述性状态转移”,他是由Roy Thomas Fielding博士在他的论文 《Architectural Styles and the Design of Network-based Software Architectures》中提出的一个术语。REST本身只是为分布式超媒体系统设计的一种架构风格,而不是标准。
基于Web的架构,实际上就是各种规范的集合,这些规范共同组成了Web架构。比如Http协议,比如客户端服务器模式,这些都是规范。每当我们在原有规范的基础上增加新的规范,就会形成新的架构。而REST正是这样一种架构,他结合了一系列的规范,而形成了一种新的基于Web的架构风格。
传统的Web应用大都是B/S架构,它包括了如下一些规范 。
客户-服务器
无状态性
-
无状态性是在客户-服务器约束的基础上添加的又一层规范。他要求通信必须在本质上是无状态的,即从客户到服务器的每个request都必须包含理解该request所必须的所有信息。这个规范改善了系统的可见性(无状态性使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前request,而不必了解所有的request历史),可靠性(无状态性减少了服务器从局部错误中恢复的任务量),可伸缩性(无状态性使得服务器端可以很容易的释放资源,因为服务器端不必在多个request中保存状态)。同时,这种规范的缺点也是显而易见得,由于不能将状态数据保存在服务器上的共享上下文中,因此增加了在一系列request中发送重复数据的开销,严重的降低了效率。
缓存
B/S架构的优点是其部署非常方便,但在用户体验方面却不是很理想。为了改善这种情况,我们引入了REST。
REST在原有的架构上增加了三个新规范:统一接口,分层系统和按需代码。
统一接口
分层系统
按需代码
REST的设计准则
REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。REST提出了如下设计准则:
-
网络上的所有事物都被抽象为资源(resource);
-
每个资源对应一个唯一的资源标识符(resource identifier);
-
通过通用的连接器接口(generic connector interface)对资源进行操作;
-
对资源的各种操作不会改变资源标识符;
-
所有的操作都是无状态的(stateless)。
REST中的资源所指的不是数据,而是数据和表现形式的组合,比如“最新访问的10位会员”和“最活跃的10为会员”在数据上可能有重叠或者完全相同,而由于他们的表现形式不同,所以被归为不同的资源,这也就是为什么REST的全名是Representational State Transfer的原因。资源标识符就是URI(Uniform Resource Identifier),不管是图片,Word还是视频文件,甚至只是一种虚拟的服务,也不管你是xml格式,txt文件格式还是其它文件格式,全部通过URI对资源进行唯一的标识。
REST是基于Http协议的,任何对资源的操作行为都是通过Http协议来实现。以往的Web开发大多数用的都是Http协议中的GET和POST方法,对其他方法很少使用,这实际上是因为对Http协议认识片面的理解造成的。Http不仅仅是一个简单的运载数据的协议,而是一个具有丰富内涵的网络软件的协议。他不仅仅能对互联网资源进行唯一定位,而且还能告诉我们如何对该资源进行操作。Http把对一个资源的操作限制在4个方法以内:GET,POST,PUT和DELETE,这正是对资源CRUD操作的实现。由于资源和URI是一一对应的,执行这些操作的时候URI是没有变化的,这和以往的Web开发有很大的区别。正由于这一点,极大的简化了Web开发,也使得URI可以被设计成更为直观的反映资源的结构,这种URI的设计被称作RESTful的URI。这位开发人员引入了一种新的思维方式:通过URL来设计系统结构。当然了,这种设计方式对一些特定情况也是不适用的,也就是说不是所有的URI都可以RESTful的。
REST之所以可以提高系统的可伸缩性,就是因为它要求所有的操作都是无状态的。由于没有了上下文(Context)的约束,做分布式和集群的时候就更为简单,也可以让系统更为有效的利用缓冲池(Pool)。并且由于服务器端不需要记录客户端的一系列访问,也减少了服务器端的性能。
使用REST架构
对于开发人员来说,关心的是如何使用REST架构,这里我们来简单谈谈这个问题。REST不仅仅是一种崭新的架构,它带来的更是一种全新的Web开发过程中的思维方式:通过URL来设计系统结构。在REST中,所有的URL都对应着资源,只要URL的设计是良好的,那么其呈现的系统结构也就是良好的。这点和TDD(Test Driven Development)很相似,他是通过测试用例来设计系统的接口,每一个测试用例都表示一系列用户的需求。开发人员不需要一开始就编写功能,而只需要把需要实现的功能通过测试用例的形式表现出来即可。这个和REST中通过URL设计系统结构的方式类似,我们只需要根据需求设计出合理地URL,这些URL不一定非要链接到指定的页面或者完成一些行为,只要它们能够直观的表现出系统的用户接口。根据这些URL,我们就可以方便的设计系统结构。从REST架构的概念上来看,所有能够被抽象成资源的东西都可以被指定为一个URL,而开发人员所需要做的工作就是如何能把用户需求抽象为资源,以及如何抽象的精确。因为对资源抽象的越为精确,对REST的应用来说就越好。这个和传统MVC开发模式中基于Action的思想差别就非常大。设计良好的URL,不但对于开发人员来说可以更明确的认识系统结构,对使用者来说也方便记忆和识别资源,因为URL足够简单和有意义。按照以往的设计模式,很多URL后面都是一堆参数,对于使用者来说也是很不方便的。
既然REST这么好用,那么是不是所有的Web应用都能采取此种架构呢?答案是否定的。我们知道,直到现在为止,MVC(Model-View-Controller)模式依然是Web开发最普遍的模式,绝大多数的公司和开发人员都采取此种架构来开发Web应用,并且其思维方式也停留于此。MVC模式由数据,视图和控制器构成,通过事件(Event)触发Controller来改变Model和View。加上Webwork,Struts等开源框架的加入,MVC开发模式已经相当成熟,其思想根本就是基于Action来驱动。从开发人员角度上来说,贸然接受一个新的架构会带来风险,其中的不确定因素太多。并且REST新的思维方式是把所有用户需求抽象为资源,这在实际开发中是比较难做到的,因为并不是所有的用户需求都能被抽象为资源,这样也就是说不是整个系统的结构都能通过REST的来表现。所以在开发中,我们需要根据以上2点来在REST和MVC中做出选择。我们认为比较好的办法是混用REST和MVC,因为这适合绝大多数的Web应用开发,开发人员只需要对比较容易能够抽象为资源的用户需求采取REST的开发模式,而对其它需求采取MVC开发即可。这里需要提到的就是ROR(Ruby on Rails)框架,这是一个基于Ruby语言的越来越流行的Web开发框架,它极大的提高了Web开发的速度。更为重要的是,ROR(从1.2版本起)框架是第一个引入REST做为核心思想的Web开发框架,它提供了对REST最好的支持,也是当今最成功的应用REST的Web开发框架。实际上,ROR的REST实现就是REST和MVC混用,开发人员采用ROR框架,可以更快更好的构建Web应用。
分享到:
相关推荐
本文介绍 sqlRest 框架,它是一种高效的轻量级数据库 REST 服务解决方案,您可以通过简单的配置直接将数据库中的数据暴露成 REST 风格的 Web 服务,并将数据库的 CRUD 操作和 REST 服务的 GET, DELETE, POST, PUT...
RESTier, 构建rest式服务的一个转向 RESTier 1.介绍OData支持开放数据协议。 它是由微软发起的,现在是ISO和OASIS标准。 使用简单HTTP请求,可以以创建和使用 RESTful api,使资源在数据模型中定义,并使用url进行...
通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,...
下面我介绍以下如何使用Python调用百度的REST API实现一个简单的语音识别。 注册账号,并成为开发者 打开 http://yuyin.baidu.com/ ,并且使用你的百度账号登陆,如果你不是开发者,系统会自动引导你申请成为开发者...
介绍 REST(REpresentational State Transfer)是一种架构风格,由在他的博士论文“”中。 根据菲尔丁的说法, “具象状态转移”这个名称旨在唤起一个精心设计的 Web 应用程序的行为方式:网页网络(虚拟状态机),...
page_type 语言 产品 描述 urlFragment 样本 尖锐的 ... Java javascript ...此存储库提供了认知服务API的代码示例。...如果尚未创建所需的Azure服务,请转到此处获取免费(或付费)帐户: 使用代码示
最新WSO2 Enterprise Integrator6.6.0 使用手册,WSO2 ESB++ 企业集成。 包括rest代理和路由转发、rest转webservie服务,webservice服务转rest,tcp转webservice服务 WSO2三款产品介绍等
邮差Payku API集合介绍。 在Payku,我们现在为您提供Postman中的集合,使您可以浏览器中的扩展程序或系统中的应用程序进行操作,以便快速,轻松地使用我们的REST API,非常适合开发人员和用户使用。 以同样的方式,...
Vulcain是一种全新的协议,使用HTTP / 2 Server Push来创建快速且惯用的客户端驱动的REST API。...介绍 多年来,已经创建了多种格式来解决影响Web API的性能瓶颈:, ... 是针对HTTP / 1的智能。 但是,当涉及到
Beaconstac REST API文档 介绍 Beaconstac API围绕组织。 我们的API具有可预测的面向资源的URL,接受请求正文,返回响应,并使用标准的HTTP响应代码,身份验证和动词。 验证 Beaconstac API使用API密钥对请求...
介绍 ResponseBuilder是一个软件包,旨在帮助您构建一个美观,规范化且易于使用的REST API JSON响应。 好处 ResponseBuilder是由REST API开发人员为REST API开发人员编写的,并且基于API两面的长期经验。 它是轻量级...
现在我已经介绍了每个人,这个项目是所有这些的融合,以提供一个在 Nim 中实现的 reST QuickLook 查看器。 还有一些替代的 python 实现,比如 ,它以某种方式从。 但是我不喜欢 python 版本有两个原因: Python ...
主要介绍了详解从Django Rest Framework响应中删除空字段,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
介绍 这是使用 RESTful API 的 Java 示例代码。 单击查看 API 文档。 此示例是使用 、 和用 Java 编写的。 入门 请按照以下步骤开始: 步骤 1:为 Java 配置 Eclipse IDE 您需要下载Java EE Developers的Eclipse ...
介绍 net-api是有据可查的REST API平台,可从网络设备返回结构化数据。 此应用程序混合了各种技术,并且经过开发以突出显示多个开源项目可能实现的功能。 目录 net-api概述 下图显示了net-api的概述: 如图所示,...
Sphinx的AsciiDoc Builder和Writer(asciidoc)介绍Sphinx用于使用Docutils从reST源文件构建文档。 尽管有许多Sphinx输出编写器,例如html,ePub和LaTex,但没有可用的转换工具将基于Sphinx的reST文档转换为asciidoc...
物联网的各种通讯协议介绍,包含MQTT、 DDS、 AMQP、XMPP、 JMS、 REST、 CoAP等协议。
通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,...
介绍该项目是Pandalytic Technology Pvt的后端模板。 Ltd. CMS,一种内容管理系统。 这是Node.js中CMS的实现。设置确保完全按照以下说明执行所有这些步骤。 不要错过任何步骤,否则您将无法运行此应用程序。安装...