`
阿尔萨斯
  • 浏览: 4363914 次
社区版块
存档分类
最新评论

RESTful GeoWeb学习手记(一):构建REST风格的网络服务

 
阅读更多

RESTful GeoWeb学习手记(一):构建REST风格的网络服务

粟卫民http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:<chsdate w:st="on" year="2007" month="8" day="14" islunardate="False" isrocdate="False"><span lang="EN-US">2007-8-14</span></chsdate>

保留所有版权。如需转载,请联系作者,并在醒目位置注明出处

GeoWeb是一个新造出来的词(http://en.wikipedia.org/wiki/Geoweb),也是国外一个会议(http://www.geoweb.org/)的名称和主题,这个会议主要讨论的就是Web上的GIS应用。同样,RESTful也是一个新造词,它来源于REST,是形容词,表示“很REST”的意思。所以,RESTful GeoWeb表示“很REST风格的Web GIS应用”。在国外,这个领域在今年讨论很热,本系列手记就是起一个抛砖引玉的作用,希望可以给这个领域的学习者一点启示。

手记(一)的主要参考文献是:

Roger L. Costello. Building Web Services the <street w:st="on"><address w:st="on">REST Way</address></street>.

http://www.xfront.com/REST-Web-Services.html

这篇文章写得很不错,我本来打算翻译下这篇文章,试翻译了几段,无奈自己的翻译水平有限,同时也没有时间,所以这里就结合自己的理解谈谈REST是什么和怎样构建一种REST风格的网络服务。这将为我们以后学习RESTful GeoWeb打下基础。

REST是什么?

RESTRoy Fielding在他的博士论文[1]中提出的用于描述一种网络系统架构风格的名词术语。它是Representational State Transfer的首字母缩写。

它为什么叫Representational State Transfer

网页是由资源组成的。资源是我们感兴趣的任何对象。举例来说,波音公司可能会定义一种747资源。然后假定用户用下述URL来访问这个747资源:

http://www.boeing.com/aircraft/747

返回给用户的将是这种资源的一种representation(表现形式)(比如说,Boeing747.html)。这种表现形式使客户端应用具有了一种state(状态)。也就是说,一个资源具有多种表现形式,访问不同的表现形式就使客户端具有了不同的状态。

服务器如何确定返回资源的哪种表现形式?[2]

Ruby On Rails 中是通过分辨 HTTP Request Header 信息来分辨客户端是想要取得资源的哪一种表现形式的数据。

当我们用浏览器访问一个网址时,浏览器会构造一个 HTTP 请求。这个请求有一个头信息,其中包括了本次请求接受何种类型的数据。通常浏览器发送的 HTTP 请求头中,Accept 的值都是 */*,也就说接受服务器返回的任何类型的数据。

因此,只要我们指定一个特定的 Accept 参数,那么服务器就可以通过判断该参数来决定返回什么类型的数据。所以在一个采用 REST 架构的应用中,要获取同一个资源的不同表现形式的数据,只需要使用不同的HTTP 请求头信息就行了。

REST——是一种架构风格而不是一种标准

标准是为了系统交互,所以规定了很多细节、格式什么的,而架构是为了指导系统设计,只是一种原则,没有具体的、硬性的规定。就像C/SB/SAJAX一样,REST也只是一种架构风格,它可以指导我们如何设计一种Web系统的架构。尽管如此,REST使用如下标准:

<!--[if !supportLists]-->l <!--[endif]-->HTTP

<!--[if !supportLists]-->l <!--[endif]-->URL

<!--[if !supportLists]-->l <!--[endif]-->XML/HTML/GIF/JPEG/etc(资源表现形式)

经典REST系统

最经典的REST系统就是Web! 不过传统Web通常只考虑 GET POST 这两种 HTTP 请求方法。实际上,HTTP 还有 HEADPUTDELETE 等请求方法。而在 REST 架构中,用不同的 HTTP 请求方法来处理对资源的 CRUD(创建、读取、更新和删除)操作:

<!--[if !supportLists]-->l <!--[endif]-->POST: 创建

<!--[if !supportLists]-->l <!--[endif]-->GET: 读取

<!--[if !supportLists]-->l <!--[endif]-->PUT: 更新

<!--[if !supportLists]-->l <!--[endif]-->DELETE: 删除

经过这样的一番扩展,我们对一个资源的 CRUD 操作就可以通过同一个 URI 完成了:

http://www.example.com/photo/logo(读取)

仍然保持为 [GET] http://www.example.com/photo/logo

http://www.example.com/photo/logo/create(创建)

改为 [POST] http://www.example.com/photo/logo

http://www.example.com/photo/logo/update(更新)

改为 [PUT] http://www.example.com/photo/logo

http://www.example.com/photo/logo/delete(删除)

改为 [DELETE] http://www.example.com/photo/logo

从而进一步规范了资源标识的使用。

通过 REST 架构,Web 应用程序可以用一致的接口(URI)暴露资源给外部世界,并提供对资源的操作服务。这对于以资源为中心的 Web 应用来说非常重要。例如照片共享网站、用户社区等。

REST Web Services的特点

<!--[if !supportLists]-->l <!--[endif]-->客户端-服务器:拉风格的交互模式:消费方把主动获取表示

<!--[if !supportLists]-->l <!--[endif]-->无状态:每个从客户端到服务器的请求必须包含足够的信息使得服务器理解该请求,不需要服务器上存储的上下文信息

<!--[if !supportLists]-->l <!--[endif]-->缓存:为了提高网络效率,响应应该可以被标示成可缓存的或是不可缓存的

<!--[if !supportLists]-->l <!--[endif]-->统一的接口:所有资源通过通用的接口访问(HTTP GET, POST, PUT, DELETE

<!--[if !supportLists]-->l <!--[endif]-->命名资源:系统由通过URL命名的资源组成

<!--[if !supportLists]-->l <!--[endif]-->互连的资源表示:资源的表示通过URL互相联系起来,从而客户端可以从一个状态转换到另一个

<!--[if !supportLists]-->l <!--[endif]-->层次化的组件:中间件,比如代理服务器,缓存服务器,网关等,可以插入到客户端和资源中间来完成性能和安全等功能

REST Web Services设计原则

<!--[if !supportLists]-->l <!--[endif]-->构建REST Web Services的关键是识别出所有需要对外服务的概念层实体。

<!--[if !supportLists]-->l <!--[endif]-->为每个资源创建URL。资源使用名称形式的URL,而不使用动词形式的URL

<!--[if !supportLists]-->l <!--[endif]-->对资源进行分类,区分出哪些客户端只能获取,哪些是可以修改的。前者使用HTTP GET来访问,后者使用HTTP POST, PUTDELETE来访问。

<!--[if !supportLists]-->l <!--[endif]-->所有通过HTTP GET访问的资源必须是没有其他影响的。

<!--[if !supportLists]-->l <!--[endif]-->没有资源是作为孤岛存在的。在资源表示中放入超链接来获取关于资源的更多的信息。

<!--[if !supportLists]-->l <!--[endif]-->逐步的暴露数据。不要在单一的文档中暴露所有数据。提供超链接来获取更多的信息。

<!--[if !supportLists]-->l <!--[endif]-->使用schema来指定响应格式。

<!--[if !supportLists]-->l <!--[endif]-->说明该服务是使用WSDL文档来调用,还是简单的HTML文档。

[1] Roy Fielding. Architectural Styles and the Design of Network-based Software Architectures. PHD DISSERTATION. http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

[2] 廖宇雷的部落格. 学习 REST. http://www.dualface.com/blog/?p=356




<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
分享到:
评论

相关推荐

    Restful使用多层体系结构构建REST风格的Web服务和动态Web应用程序

    在构建现代Web应用程序时,REST(Representational State Transfer,表述性状态转移)风格已经成为一种广泛采用的架构设计原则。RESTful API设计不仅简洁且易于理解,还提供了良好的可伸缩性和可维护性。本篇文章将...

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

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

    JavaWeb服务:构建与运行

    《Java Web 服务:构建与运行(影印版)》提供了对Java的API的一个全面介绍,包括针对XML Web服务的JAX-WS和针对RESTful Web服务的JAX-RS。《Java Web服务:构建与运行》通过提供混合架构概述、完整的工作代码示例以及...

    RESTful Java Web Services

    REST(Representational State Transfer)是一种软件架构风格,最初由Roy Fielding在他的博士论文中提出。它定义了一种简单且灵活的方法来创建分布式系统,如Web服务。在《RESTful Java Web Services》一书中,作者...

    一个Delphi实现的HttpServer,支持RESTful风格路由

    REST(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序,尤其适用于Web服务。其核心思想是通过HTTP方法(如GET、POST、PUT、DELETE等)操作资源,这些资源由URI(统一资源标识符)唯一...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    REST(Representational State Transfer)是一种软件架构风格,用于定义客户端与服务端之间交互的标准方式。RESTful API是基于HTTP协议设计的,通过不同的HTTP方法(如GET、POST、PUT和DELETE)来执行对应的操作,并...

    Rest Restful 基于rocket服务搭建代码

    Rest Restful 基于rocket服务搭建代码 代码包含的实践用例: 1. restful post, get, put, delete方法 2. 基于rocket的中间层开发,用于日志处理 3. docker部署开发用的postgres 4. async 函数开发 5. async 函数递归...

    Node.js:构建RESTfulAPI服务.docx

    Node.js:构建RESTfulAPI服务.docx

    在同一个系统里用cxf 实现SOAP 协议和RESTful风格 两种类型的webservice接口

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,其中两种主要的接口类型是SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)。本篇将详细讲解如何使用Apache CXF框架...

    restful-server-nodejs:一个REST风格的HTTP服务器,封装了很多开箱即用的业务逻辑

    在IT行业中,REST(Representational State Transfer)是一种广泛采用的Web服务设计风格,它强调了资源的概念,并通过HTTP协议中的动词(GET、POST、PUT、DELETE等)来操作这些资源。Node.js则是一个基于Chrome V8...

    开发技术-Web开发构建REST风格的Web应.zip

    在Web开发领域,REST(Representational State Transfer,表述性状态转移)是一种广泛采用的架构风格,用于构建可扩展、易维护的Web服务。REST风格的Web应用通常具有高性能、无状态和缓存等特性,使其成为API设计的...

    REST-Project.zip_REST-Project_java RESTFul_java rest_project_res

    【REST-Project.zip】是一个包含Java RESTful服务实现示例的压缩包,旨在展示如何使用REST技术构建Web服务。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以数据...

    Spring CXF Restful 实例

    REST(Representational State Transfer)是一种软件架构风格,常用于构建现代Web服务,强调简洁、无状态和基于标准的接口设计。 首先,让我们了解REST的基本原则。RESTful API通常基于HTTP协议,通过GET、POST、...

    SpringMVC构建REST接口:第四篇 第一个REST风格的接口的源代码

    在本篇中,我们将深入探讨如何使用Spring MVC构建RESTful接口,主要关注的是在实际项目中创建第一个REST风格接口的源代码实现。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 的...

    Restful风格编程面试题

    Restful风格编程是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。 ...

    什么是REST,符合REST的API叫RESTful 两种SOA接口实现:SOAP(WebService) vs REST

    Fielding在2000年他的博士论文中提出的一种软件架构风格,主要用于设计网络应用程序。RESTful API则是遵循REST原则的Web服务接口设计规范,它强调资源的表述和状态转移,使得系统更加简洁、高效。 在RESTful API的...

    RESTful-Top2Vec:使用REST API公开Top2Vec模型

    Top2Vec模型REST API 使用REST API公开经过训练并保存的模型。获取Docker映像docker pull ddangelov/restful-top2vec运行容器Docker运行参数: model_path :已保存的Top2Vec模型的路径。 model_name :Top2Vec型号...

    go-restful:使用Go构建REST风格的Web服务的软件包

    使用Google Go构建REST风格的Web服务的软件包 REST要求开发人员以与协议定义一致的方式显式使用HTTP方法。 这项基本的REST设计原则在创建,读取,更新和删除(CRUD)操作与HTTP方法之间建立了一对一的映射。 根据此...

Global site tag (gtag.js) - Google Analytics