`

基于Rest风格web服务的研究

 
阅读更多
摘要:Web服务从诞生到现在已有十余年历史,人们用它来解决不同平台之间的互操作问题。传统的Web服务的是基于RPC风格的,其实现技术主要包含SOAP、WS标准栈等。RPC风格的Web服务在相对封闭,用在Web这个分布的、开放的环境中将带来一些问题,如技术架构复杂、可伸缩性差等。研究的REST式风格Web服务足以解决上述问题。

关键字:Rest 、架构、web服务、HTTP、URI

引言:REST风格是由HTTP协议的编写者Roy Thomas Fielding在他的博士论文中正式提出的,一种现代Web架构模型,用来指导Web的设计、定义和部署。REST也可以说是HTTP和URI这两个Web架构基础协议背后的设计原理,基于REST风格来设计Web应用的架构,就是最大限度利用HTTP和URI潜力的最佳实践。其实当HTTP被发明出来的时候,REST就已经存在了,只是后来的Web开发模式越来越背离HTTP的本质,舍本逐末的追求了RPC模型。利用REST风格构建的Web服务可以充分利用Web的特性,解决传统的构建Web服务带来的问题。

1.Rest架构的介绍

REST(Representational State Transfer)是Roy Feilding的博士论文中提出的概念,它是Web系统体系结构设计原则的一种描述,一种基于资源的服务访问架构。Roy Feilding在他的论文中对REST的定义是:REST 的目的是决定如何使一个良好设计的Web程序向前进行,用户可以通过选择一个带有超链接的Web页面上的超链接(代表状态迁移),使得另一个Web页面(代表程序的下一个状态)返回到用户,使得Web程序能进一步运行。例如:客户请求某火车站的购票服务,返回结果的页面中包含有火车班次和时刻表两个链接,则这两个链接是对服务端提供资源的表(Representational)。得到返回结果后,客户选择一个链接来决定下一步动作,这意味着客户的状态也随着迁移。这样客户可以维护自己的程序状态。

2. REST与CRUD原则的关系

REST软件架构遵循了CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建(Create)、获取(Read)、更新(Update)和销毁(DELETE)就可以完成对其操作和处理了。其实世界万物都是遵循这一规律:生、变、见、灭。所以计算机世界也不例外。这个原则是源自于我们对于数据库表的数据操作:insert(生)、select(见)、update(变)和delete(灭),所以有时候CRUD也写作为RUDI,其中的I就是insert。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。

3. 构建基于REST方式的Web服务

Web 服务技术让应用程序可以用平台独立或编程语言独立的方式相互通信。但是传统的XML- RPC 风格的Web 服务, 正逐渐受到复杂性恶魔的威胁, 称作REST 风格的Web Services 提供了更简单的替代方式。

在基于REST 方式Web系统中,所有资源都有一个URI,包括Web服务也用URI来标识。用以资源标识的URI最好是逻辑URI(例:http://www.anyshop.com/5686),而不是物理URI(http://www.anyshop.com/5686.html)。

使用逻辑URI的好处是对服务器端的资源修改不影响客户的使用。使用 HTTP的CET、POST、PUT和DELEIT 4个动作作为资源的通用接口,用户通过它们访问资源。在此,HTTP作为一个程序协议来使用,而不是只作为传送一个SOAP消息的传输协议来使用。

以某零件公司的零件仓库Web服务为例来解释REST Web服务的基本思想。部署在服务器上的零件仓库对外发布一些服务,从而客户能够:

l 获取 一 份元件清单。

l 获取某个特定元件的详细信息。

l 提交一个采购清单(OP)。

l 获取元件清单

由于 基 于 REST的Web服务可以通过一个URI来访问,因此调用一个Web服务就十分简单。顾客在订购单(Order1)里需要获得零件的列表,假设有一个Web服务PartsList实现此功能,那么使用http://www.anycorp.com/PartsList即可得到零件列表。客户只需这样调用,至于服务器端如何实现,对客户来说是透明的。因为对客户是透明的,所以服务器可以自由的修改资源而不影响客户,实现了松散藕合的特性。

客户知道使用前面的URL 后,那么服务器将返回包含零件列表的一个文档,即:

<? xml version”1.0”>

<p:Parts xmlns:p=”http://www.anycorp.com”

Xmlns:xlink=”http://www.w3.org/1999/xlink”>

<Part id = “00345” xlink:href = “http://www.anycorp.com/PartsList/00345”>

<Part id = “00346” xlink:href =“http://www.anycorp.com/PartsList/00346”>

</p:Parts>

返回的文档中包含了对各个零件的链接,客户选择合适的链接可以将该链接指向的资源迁移到客户,实现客户状态的自维护,这是REST的关键特征。获取某个特定元件的详细信息

如果想要以XML形式返回每个零件详细的信息,只需在URL后加上零件编号参数,比如http://www.anycorp.com/PartsList/00345,则会返回如下的文档:

<? Xml version=”1.0”>

<p:Part xmlns:p=”http://www.parts-depot.com”

Xmlns:xlink=”http://www.w3.org/1999/xlink”>

<Part-ID>00345</Part-ID>

<Name>Widget-A</Name>

<Description>This part is used within the frap assembly</Description>

<Specification xlink:href=”http://www.anycorp.com/PartsList/00345/specification”/>

<UnitCost currency=”USD”>0.10</UnitCost>

<Quantity>10</Quantity>

</p:Part>

从以上返回的数据看,这个数据又链接到更多的数据。客户可继续选择这些链接以获得更详细的数据,这正是REST的关键所在。

提交一个采购清单(OP),这个服务利用一个指向PO提交的URL。客户依照零件仓库预先定义的PO格式创建一个PO实例文档。客户将PO.xml作为HTTP POST承载的内容提交上来。PO服务响应此PO提交请求,从而客户可以随时检索、更新、编辑这个PO。PO 于是成为客户端与服务器端共享的一段信息。共享信息(PO)由服务器端指定的URL访问,并暴露为一个Web服务。

4.REST Web服务设计原则

(1) 以REST构建Web服务的关键是要正确识别作为服务的资源。

(2) 为每个资源提供URL,资源应该是名词,不是动词。

(3) 根据客户处理资源的方式分类,可以分为客户仅接收资源的表现性和客户能够修改(增加)资源。对于前者,提供HTTP GET 方法访问,对于后者,提供HTTP POST,PUT和DELETE。

(4) 所有通过HTTP CET访问的资源应该是不可更改的。即是说,这些资源仅仅向客户返回一个资源的表现性,客户调用他们不能更改它们。

(5) 没有孤立的表现性。换言之,在资源的表现性中提供链接,让客户能更深人的获取更多的信息,或者相关信息。

(6) 逐步的提供数据,不应该在一个文档里提供所有的内容,可以为更详细的信息提供链接。

因为REST是对当今Web体系结构设计原则的一种描述,所以REST的目标和原则是对当今Web中已经成功应用的要素的总结。

4. 总结

本文描述了基于REST的Web服务设计原则和特点,以及构建基于REST的Web服务的思想。通过对REST的理解,REST必然会对Web服务的体系结构产生重要的影响基于REST 的Web服务必将推进当前Web服务技术的大规模应用和进一步发展。

分享到:
评论

相关推荐

    基于REST的Web服务客户端.rar

    本资料“基于REST的Web服务客户端”将深入探讨如何创建和使用这种服务的客户端。 首先,理解REST的基本原则至关重要。REST强调无状态、缓存、统一接口和层状系统等核心概念。无状态意味着每次请求都包含处理请求所...

    基于REST的WebServices研究_汪芳琴

    传统的Web服务大多采用基于RPC交互模型,该模型在相对... 最后将论文的研究成果应用于直升机数字化工程的信息编码管理系统中,应用表明:基于REST的Web Services可以降低了Web服务的耦合度,提高了系统的可靠性和可伸缩性。

    Chrome基于REST的Web服务客户端插件

    Chrome基于REST的Web服务客户端插件是一款非常实用的开发者工具,尤其对于那些频繁与RESTful API打交道的IT专业人员来说,它提供了一种方便、快捷的方式来测试和调试接口。REST(Representational State Transfer)...

    Jersey Java规范下REST风格Web Service开发框架

    Jersey 是一个基于 Java 规范的 REST 风格 Web Service 开发框架,旨在帮助开发者快速构建 REST 风格 Web 服务。Jersey 是 JAX-RS(Java API for RESTful Web Services)的参考实现,已经达到了 0.7 版本。Jersey 的...

    Chrome基于REST的Web服务客户端插件.zip

    Chrome基于REST的Web服务客户端插件是用于Google Chrome浏览器的一款实用工具,它使得开发者和测试人员能够方便地与RESTful Web服务进行交互。REST(Representational State Transfer)是一种架构风格,广泛应用于...

    基于REST的Web服务客户端v5.6.6

    本谷歌Chrome扩展程序可以帮助开发人员开发和测试REST风格的Web服务API与所有支持的方法,比如GET,POST,PUT,PATCH,DELETE 和 OPTIONS。 该扩展程序支持HTTP基本身份验证,支持多种头部信息和响应格式。 本扩展...

    基于REST风格的RBAC模型研究

    ### 基于REST风格的RBAC模型研究 #### 概述 随着互联网技术的不断发展,Web应用系统规模持续扩大,对于访问控制的需求也日益增长。传统的基于角色的访问控制(Role-Based Access Control, RBAC)模型在面对大规模...

    在.NET / C#中构建基于ReST的Web服务

    在.NET / C#中构建基于ReST的Web服务是一个广泛且重要的主题,涉及到现代Web应用程序开发的核心技术。ReST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,主要应用于分布式系统,如...

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

    基于 REST 服务(RESTful Service)的 Web 应用系统设计任务主要包括:识别并设计 REST 风格的服务,采用面向服务的思想进行 REST 服务集成。采用这种方法设计的 Web 应用系统能够结合 REST 风格和面向服务思想的...

    开发技术-Web开发基于REST的GISWeb服务研究.zip

    本资料主要探讨了如何基于REST设计和实现GIS(Geographic Information System,地理信息系统)Web服务。GIS是处理、分析和展示地理数据的关键工具,而将RESTful原则应用于GIS Web服务可以极大地提高其可伸缩性、灵活...

    WEB框架——REST原理(架构风格与基于网络的软件架构设计)

    REST风格的架构强调简洁、高效和可扩展性,它基于HTTP协议,利用其固有的方法(GET、POST、PUT、DELETE等)来操作资源。 在RESTful架构中,**资源(Resource)**是核心概念,每个资源都有一个唯一的URI(Uniform ...

    基于REST架构风格的Web+20实现.pdf

    在深入探讨“基于REST架构风格的Web+20实现”这一主题之前,需要先了解REST(Representational State Transfer)架构风格的基本概念以及Web 2.0的相关技术背景。 REST是一种软件架构风格,最初由Roy Fielding在他的...

    基于REST架构的Web2.0的研究

    REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格和开发方式,主要应用于Web服务的构建,尤其在Web2.0时代,REST架构的设计原则和模式成为了构建可扩展、高性能、易维护的Web...

    基于Android平台Web服务的应用研究.pdf

    本文主要探讨了如何在Android平台上利用REST风格的Web服务进行应用开发。首先,介绍了REST服务的基本概念和优势,包括其基于URI(Uniform Resource Identifier)的资源定位,使用HTTP方法(如GET、POST、PUT和DELETE...

    Rest-Web-Service-Client_v3.6.0.crx

    基于REST的Web服务客户端是一款功能强大的谷歌浏览器插件,使用基于REST的Web服务客户端(模拟REST客户端)可以让用户使用谷歌浏览器模拟REST请求来测试REST风格,这款插件使用非常方便,欢迎大家来下载使用!

    .NET下rest 风格的服务 内含WCF和 web API 两种方式的demo

    本篇文章将深入探讨这两种技术以及它们如何实现REST风格的服务,并通过提及的压缩包中的示例进行详细解释。 首先,让我们理解REST(Representational State Transfer)是什么。REST是一种网络应用程序的设计风格和...

Global site tag (gtag.js) - Google Analytics