`
阅读更多
REST 简介

 

       REST 是英文 Representational State Transfer 的缩写,这个术语由 Roy Thomas Fielding 博士在他的论文《Architectural Styles and the Design of Network-based Software Architectures》中提出。

 

从这篇论文的标题可以看出:REST 是一种基于网络的软件架构风格。

 

提示:国内很多网络资料将 REST 翻译为“表述性状态转移”,不过笔者对这个翻译不太认同。

       因为这个专业术语无法传达 REST 的含义,读者可以先不要理会 REST 到底该如何翻译,尽量先去理解 REST 是什么?有什么用?然后再来看这个术语的翻译。

 

关于 Roy Thomas Fielding 博士的原文参见如下地址:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm。

REST 架构是针对传统 Web 应用提出的一种改进,是一种新型的分布式软件设计架构。

      对于异构系统如何进行整合的问题,目前主流做法都集中在使用 SOAP、WSDL 和 WS-* 规范的 Web Services。而 REST 架构实际上也是解决异构系统整合问题的一种新思路。

如果开发者在开发过程中能坚持 REST 原则,将可以得到一个使用了优质 Web 架构的系统,从而为系统提供更好的可伸缩性,并降低开发难度。

关于 REST 架构的主要原则如下:网络上的所有事物都可被抽象为资源(Resource)。

 

 每个资源都有一个唯一的资源标识符(Resource Identifier)。

  1. 同一资源具有多种表现形式.
  2. 使用标准方法操作资源。
  3. 通过缓存来提高性能。
  4. 对资源的各种操作不会改变资源标识符。
  5. 所有的操作都是无状态的(Stateless)。

仅从上面几条原则来看 REST 架构,其实依然比较难以理解,下面笔者将从如下二个方面来介绍 REST。

 

资源和标识符

 

      现在的 Web 应用上包含了大量信息,但这些信息都被隐藏在 HTML、CSS 和 JavaScript 代码中,对于普通浏览者而言,他们进入这个系统时无法知道该系统包含哪些页面;

      对于一个需要访问该系统资源的第三方系统而言,同样无法明白这个系统包含多少功能和信息。

URI 和 URL与 URI 相关的概念还有 URL,URL 是 Uniform Resource Locator,也就是统一资源定位符的意思。其中 http://www.crazyit.org 就是一个统一资源定位符,URL 是 URI 的子集。简而言之:每个 URL 都是 URI,但不是每个 URI 都是 URL。

从 REST 架构的角度来看

       该系统里包含的所有功能和信息,都可被称为资源(Resource),REST 架构中的资源包含静态页面、JSP 和 Servlet 等,该应用暴露在网络上的所有功能和信息都可被称为资源。除此之外,REST 架构规范了应用资源的命名方式,

       REST 规定对应用资源使用统一的命名方式:REST 系统中的资源必须统一命名和规划,REST 系统由使用 URI(Uniform Resource Identifier,即统一资源标识符)命名的资源组成。

      由于 REST 对资源使用了基于 URI 的统一命名,因此这些信息就自然地暴露出来了,从而避免 “信息地窖”的不良后果。

      对于当今最常见的网络应用来说,资源标识符就是 URI,资源的使用者则根据 URI 来操作应用资源。当 URI 发生改变时,表明客户机所使用的资源发生了改变。

从资源的角度来看

      当客户机操作不同的资源时,资源所在的 Web 页(将 Web 页当成虚拟的状态机来看)的状态就会发生改变、迁移(Transfer),这就是 REST 术语中 ST(State Tranfer)的由来了。客户机为了操作不同状态的资源,则需要发送一些 Representational 的数据,这些数据包含必要的交互数据,以及描述这些数据的元数据。这就是 REST 术语中 RE(Representational)的由来了。理解了这个层次之后,至于 REST 如何翻译、或是否真正给它一个中文术语,读者可自行决定。

 

操作资源的方式

      对于 REST 架构的服务器端而言,它提供的是资源,但同一资源具有多种表现形式(可通过在 HTTP Content-type 头中包含关于数据类型的元数据)。

      如果客户程序完全支持 HTTP 应用协议,并能正确处理 REST 架构的标准数据格式,那么它就可以与世界上任意一个 REST 风格的用户交互。这种情况不仅适用于从服务器端到客户端的数据,反之亦然——倘若从客户端传来的数据符合 REST 架构的标准数据格式,那么服务器端也可以正确处理数据,而不去关心客户端的类型。

      典型情况下,REST 风格的资源能以 XHTML、XML 和 JSON 三种形式存在,

其中

        XML 格式的数据是 WebServices 技术的数据交换格式;

        JSON 则是另一种轻量级的数据交换格式;

        XHTML 格式则主要由浏览器负责呈现;

      当服务器为所有资源提供多种表现形式之后,这些资源不仅可以被标准 Web 浏览器所使用,还可以由 JavaScript 通过 Ajax 技术调用,或者以 RPC(Remote Procedure Call)风格调用,从而变成 REST 风格的 WebServices。

 

       REST 架构除了规定服务器提供资源的方式之外,还推荐客户端使用 HTTP 作为 Generic Connector Interface(也就是通用连接器接口),而 HTTP 则把对一个 URI 的操作限制在了 4 个之内:GET、POST、PUT 和 DELETE。通过使用通用连接器接口对资源进行操作的好处是保证系统提供的服务都是高度解耦的,从而简化了系统开发,改善了系统的交互性和可重用性。

      REST 架构要求客户端的所有的操作在本质上是无状态的,即从客户到服务器的每个 Request 都必须包含理解该 Request 的所有必需信息。这种无状态性的规范提供了如下几点好处:

  • 无状态性使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前 Request,而不必了解前面 Request 的历史。
  • 无状态性减少了服务器从局部错误中恢复的任务量,可以非常方便地实现 Fail Over 技术,从而很容易地将服务器组件部署在集群内。
  • 无状态性使得服务器端不必在多个 Request 中保存状态,从而可以更容易地释放资源。
  • 无状态性无需服务组件保存 Request 状态,因此可让服务器充分利用 Pool 技术来提高稳定性和性能。

      当然,无状态性会使得服务器不再保存 Request 的状态数据,因此需要在一系列 Request 中发送重复数据,从而提高了系统的通信成本。

      为了改善无状态性带来的性能下降,REST 架构填加了缓存约束。

缓存:

      缓存约束允许隐式或显式地标记一个 Response 中的数据,这样就赋予了客户端缓存 Response 数据的功能,这样就可以为以后的 Request 共用缓存的数据,部分或全部的消除一些交互,增加了网络的效率。但是用于客户端缓存了信息,也就同时增加了客户端与服务器数据不一致的可能,从而降低了可靠性。


 

分享到:
评论
1 楼 随遇而安DXX 2014-10-09  

相关推荐

    REST Server in Delphi XE Using DataSnap中文版

    ### REST Server 在 Delphi XE 中使用 DataSnap 的关键技术点 #### 1. REST 架构简介 - **背景**: REST(Representational State Transfer)是 Web 服务领域的一个重要概念,尤其在过去十年中,随着 Web 2.0 的...

    谷歌浏览器插件+AdvancedRestClient+Http Rest API测试调试

    1. 安装Advanced REST Client插件:首先,你需要在Chrome浏览器的Web Store中搜索“Advanced REST Client”并安装它。安装完成后,你可以在浏览器的扩展程序栏找到ARC的图标。 2. 创建新的HTTP请求:打开ARC,点击...

    REST地图与天地图叠加

    本示例探讨的主题是“REST地图与天地图叠加”,这涉及到两种不同的地图服务技术的融合,即SuperMap iClient的REST地图服务和天地图服务。我们将详细解释这两种技术及其在Flex客户端下的叠加应用。 首先,REST...

    Rest Severs in Delphi XE Using DataSnap

    在Delphi XE中利用DataSnap构建REST服务器是一项强大的技术,可以帮助开发者创建高效、可扩展的Web服务。本文将深入探讨这一主题,介绍REST(Representational State Transfer)架构原理,以及如何在Delphi环境中...

    geoserver-rest-python-1.1

    【标题】"geoserver-rest-python-1.1" 是一个针对Geoserver的REST API接口的Python客户端库,主要用于管理、配置和操作Geoserver的版本1.1。这个库是Geoserver-rest-python-1.0的升级版,修复了已知的错误并进行了...

    elasticsearch-rest-high-level-client-6.8.3-API文档-中英对照版.zip

    赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar;...

    REST实战(REST in Practice)

    ### REST实战(REST in Practice)知识点总结 #### 一、REST简介与背景 - **REST (Representational State Transfer)**:一种软件架构风格,用于描述基于网络的应用程序如何工作。REST的核心理念是通过简单的HTTP...

    elasticsearch-rest-client-6.8.3-API文档-中文版.zip

    赠送jar包:elasticsearch-rest-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:elastic...

    REST服务构建的web应用的优势和不足

    REST 服务构建的 Web 应用优势和不足 REST(REpresentational State Transfer)是一种混合架构风格,当前互联网的核心架构风格。基于 REST 服务(RESTful Service)的 Web 应用系统设计任务主要包括:识别并设计 ...

    elasticsearch-rest-high-level-client-6.8.3-API文档-中文版.zip

    赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar;...

    Kepware IOT gateway使用教程 - REST Sever

    其中,REST Server 模块是实现这一目标的关键组件,它提供了基于 RESTful API 的接口,使得应用程序能够轻松地从 KEPWARE 获取或写入数据。本教程将详细介绍如何在 KEPWARE 中配置和使用 REST Server。 首先,确保...

    动态发布rest接口及服务调用

    在IT行业中,REST(Representational State Transfer)是一种广泛应用于网络应用程序设计的架构风格,它强调资源的表述状态转移。REST接口通常使用HTTP协议中的方法(GET、POST、PUT、DELETE等)来操作资源,实现轻...

    kettle rest 接口 请求实例

    在Kettle中,REST接口提供了一种灵活的方式与外部系统进行通信,例如,发送和接收JSON数据,执行各种操作。本教程将深入探讨如何使用Kettle与RESTful服务进行交互。 首先,我们要理解REST(Representational State ...

    C# 实现Rest服务接口,含实现文档

    本项目“C# 实现Rest服务接口,含实现文档”将详细介绍如何使用C#和ASP.NET框架来构建RESTful服务。 1. **C#语言基础**:C#是Microsoft开发的一种面向对象的编程语言,常用于Windows平台的应用程序开发,尤其在.NET...

    JavaScript天地图叠加REST地图服务

    JavaScript天地图叠加REST地图服务是将SuperMap iClient 6R for JavaScript库与天地图的REST服务相结合,实现在线地图的动态加载与显示。在Web应用中,这种技术常用于地理信息系统(GIS)的开发,使得用户可以在...

    Asp.net 实现 Rest服务接口

    【Asp.net 实现 Rest服务接口】 在现代Web开发中,REST(Representational State Transfer,表述性状态转移)已经成为一种广泛采用的API设计风格。它基于HTTP协议,以简洁、可扩展的方式提供服务,便于客户端与...

    JIRA REST Java Client

    **JIRA REST Java Client**是Atlassian官方提供的一款用于与JIRA进行交互的Java库,它使得开发人员能够轻松地通过RESTful API访问和操作JIRA系统。这个库提供了丰富的功能,包括创建、更新、查询问题(issues)、...

    Java 调用Http Rest接口 例子说明

    REST (Representational State Transfer) 是一种设计网络应用程序的架构风格,其核心原则之一是无状态性。在REST架构中,客户端和服务端之间的交互基于HTTP协议,通过发送HTTP请求并接收HTTP响应来完成。 #### 三、...

    白话REST-识别真假REST

    REST(Representational State Transfer),即“表征状态转移”,是由Roy Fielding博士在其2000年的博士论文中提出的一种软件架构风格。REST强调基于网络的分布式系统的松耦合设计,并推崇无状态通信机制。在理解...

    C++ REST SDK开发HTTP服务器

    C++ REST SDK,也被称为Casablanca,是由微软开发的一个强大的开源库,用于构建跨平台的、基于标准的C++应用,特别是针对云服务和Web API的开发。这个库提供了一组现代C++工具,使得开发者能够轻松地处理HTTP通信、...

Global site tag (gtag.js) - Google Analytics