`

热门Web开发方式 REST实现原理浅析

    博客分类:
  • REST
阅读更多

 

REST 首先只是一种架构样式,不是一种标准。这点和 Ajax 类似,两者都是利用现有的成熟技术。在 REST 的定义中,一个 Web 应用总是使用固定的 URI 向外部世界呈现(或者说暴露)一个资源。

注:URI 是英文 Uniform Resource Identifier 的缩写,中文翻译“通用资源标志符”。“通用资源标志符”是指唯一标识一个资源(xhtml 文件、图片、css 样式表)的字符串。当然了,RFC 中定义的 URI 复杂得多,不过我们此处将 URI 想象成一个人的身份证号码就行了(你不能有两个同时有效的身份证号码,一个号码也不可能同时对应两个人)。而我们天天挂在嘴边的 URL 地址就是 URI 的一种表现形式(个人理解,有错请纠正)。

知道什么是URI 后,我们来看一个实际例子:

http://www.example.com/photo/logo 指向 example.com 网站(可以视为一个 Web 应用)中类型为 photo,名字为 logo 的资源。我们用浏览器访问这个URI,看到的将可能是一个 xhtml 文档,其中用<img src=”……” />来显示实际的照片。

http://www.example.com/photo/logo 很容易让你想到 URL 重写。事实上,这个地址很可能会在服务器内部处理为 http://www.example.com/photo.php?name=logo 这样的地址。photo.php 是服务器端的一个动态脚本文件,根据 name 参数生成 xhtml 文档返回给浏览器。

现在假设我们要获取这张照片的 XML 文档。XML 文档中包含照片的文件名、文件大小、拍摄日期等等信息。也就是说我们要获取“同一个资源的不同表现形式的数据”。对于这个要求,我们可以很容易的用另一个 URL 地址达到:http://www.example.com/xml/logo。

但是,这就违背了“URI 唯一标识一个资源”的定义。如果我们要获取同一个资源的多种表现形式,那么就要使用更多的 URL,从而给一个资源指定了多个不同的 URI。

而在 REST 中,不管是获取照片的 xhtml 文档还是 XML 文档,或者照片文件本身,都是用同一个 URI,就是 http://www.example.com/photo/logo。

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

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

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

如果考虑为 Web 应用增加 Web Services,这种技术的价值就体现出来了。比如我写了一个 Delphi 程序,现在只需要构造一个包含 Accept: text/xml 的 HTTP 请求头,然后将请求发送到 http://www.example.com/photo/logo 就可以了。返回的结果就是一个 XML 文档,而不是 xhtml 文档。

因为我们的 HTTP 请求头信息有不同的状态,从而可以获得不同的数据,所以叫做“具象状态传输” :)

除了上面的用法,REST 还有进一步的扩展。

我们在 Web 应用中处理来自客户端的请求时,通常只考虑 GET 和 POST 这两种 HTTP 请求方法。实际上,HTTP 还有 HEAD、PUT、DELETE 等请求方法。而在 REST 架构中,用不同的 HTTP 请求方法来处理对资源的 CRUD(创建、读取、更新和删除)操作:
◆POST: 创建
◆GET: 读取
◆PUT: 更新
◆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 应用来说非常重要。例如照片共享网站、用户社区等。

Ruby On Rails 1.2 版对 REST 有很好的支持,但要在 PHP 中应用 REST 还需要解决不少问题:

◆如何在服务端判断 PUT、DELETE 请求方法;
◆如何获取用 PUT、DELETE 请求方法中传递的数据;
◆如何获取 HTTP 请求头信息中的 Accept 参数值;
◆如何在浏览器端发起 PUT 和 DELETE 请求。

不过我仔细看了PHP文档,我觉得上面几个问题都是可以解决的。

服务端综合使 用$_SERVER['HTTP_ACCEPT']、$_SERVER['REQUEST_URI']、$_SERVER['REQUEST_METHOD']、$_SERVER['QUERY_STRING'] 这些变量应该可以搞定前面三个问题。而第四个问题则可以用 JavaScript 的XMLHttpRequest 对象来实现。

不过我想 REST 的真正价值在于 Web Services,而不是通过浏览器操作的应用程序。

分享到:
评论

相关推荐

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

    **REST(Representational State Transfer,表述性状态转移)**是一种软件架构风格,广泛应用于Web服务的设计,特别是互联网应用程序。REST风格的架构强调简洁、...理解和掌握REST原理对于构建现代Web应用至关重要。

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

    本资料“开发技术-Web开发构建REST风格的Web应用”主要探讨了如何利用REST原则来设计和实现高效的Web服务。 REST的核心概念包括资源(Resource)、统一接口(Uniform Interface)、无状态(Statelessness)和缓存...

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

    在Web开发领域,REST(Representational State Transfer,表述性状态转移)是一种广泛采用的架构风格,主要用于构建分布式系统,特别是Web服务。本资料主要探讨了如何基于REST设计和实现GIS(Geographic Information...

    Python Django Web典型模块开发实战_用Django REST framework实现豆瓣API应用项目.pdf

    综上所述,这个课程可能涵盖了从Python的基础知识到使用Django REST framework构建Web API的全部过程,包括项目的需求分析、设计、实现和测试。通过这样的实战,学习者不仅可以提升Python和Django技能,还能掌握Web ...

    NET精髓Web服务原理与开发.pdf

    【标题】"NET精髓Web服务原理与开发"主要聚焦于.NET框架下的Web服务技术,这是一种基于互联网协议(如HTTP)的通信方式,用于使不同系统间的数据交换变得简单且标准化。Web服务允许应用程序通过网络共享功能,使得...

    Web应用开发原理与技术

    Web应用开发原理与技术是构建基于互联网的交互式应用程序的过程,它使得用户可以通过网页浏览器进行数据交换、功能操作以及信息获取。这一领域的知识涵盖了多种技术和工具,包括前端开发、后端开发、数据库管理、...

    MyEclipse REST Web Service 简单的实现例子

    在当今互联网技术日新月异的时代,REST(Representational State Transfer)架构风格已成为构建Web服务的重要方式,它强调资源的表述和状态转换,简单易用且具有高度可扩展性。MyEclipse,作为一款强大的Java集成...

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

    在IT行业中,REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,主要用于Web服务的构建。RESTful服务接口以其简洁、高效的特点,被广泛应用于分布式系统和互联网应用...

    Asp.net 实现 Rest服务接口

    在现代Web开发中,REST(Representational State Transfer,表述性状态转移)已经成为一种广泛采用的API设计风格。它基于HTTP协议,以简洁、可扩展的方式提供服务,便于客户端与服务器之间的通信。ASP.NET,作为微软...

    致远OA开发REST远程接口实现发送表单

    首先,理解REST(Representational State Transfer)是一种轻量级的Web服务交互方式,它基于HTTP协议,使得客户端和服务器之间的交互变得更加简单、直接。在Java中,我们可以使用诸如Spring Boot或Jersey等框架来...

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

    真正潜在风险存在于 REST 灵活的使用方式上,既可以被服务器端调用又能被客户端调用,所以一开始就要明确地区分用户访问权限和系统访问权限,区分 Web 页面权限和 REST 服务权限,但有时在开发中经常混为一谈,所以...

    利用PHP、REST、Dojo开发敏捷的Web_2.0应用

    REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,强调资源的表述和状态转移。RESTful API设计简单、直观,通过HTTP方法(GET、POST、PUT、DELETE)对资源进行操作。...

    REST Web Service开发实践

    在当今的软件开发领域,REST(Representational State Transfer)Web服务已经成为构建分布式系统的重要方式,因其简洁、灵活且易于理解的架构风格而备受青睐。RESTful API设计模式允许通过HTTP协议来操作资源,从而...

    Android+REST WebService服务方式手机开发

    REST是一种网络应用程序的设计风格和开发方式,基于HTTP协议,通过URI(Uniform Resource Identifier)来定位资源,使用标准的HTTP方法(如GET、POST、PUT、DELETE等)进行操作。这种设计模式使得客户端和服务器之间...

    基于 REST 的 Web 服务:基础

    REST(Representational State Transfer,代表性状态转移)是一种网络应用程序的设计风格和开发方式,主要用于构建Web服务。这种设计模式强调简洁、直接的交互方式,以提高效率和可扩展性。REST的核心思想是将Web...

    REST 基础(二):Web 服务编程,REST 与 SOAP

    在实践中,了解并掌握REST和SOAP的基本原理,以及相关的开发工具,能够帮助我们更好地设计和实现Web服务。同时,理解何时使用REST,何时选择SOAP,将有助于提高系统的效率和可维护性。无论选择哪种方法,重要的是...

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

    Jersey Java 规范下 REST 风格 Web Service 开发框架 Jersey 是一个基于 Java 规范的 REST 风格 Web Service 开发框架,旨在帮助开发者快速构建 REST 风格 Web 服务。Jersey 是 JAX-RS(Java API for RESTful Web ...

    SpringMVC4.2 开发Rest接口

    SpringMVC作为Spring框架的一部分,提供了一种强大的方式来实现REST接口。 在SpringMVC 4.2中,开发者可以利用一系列的特性来简化REST服务的开发: 1. **HTTP方法支持**:RESTful接口通常基于HTTP的CRUD操作,如...

    从零开始学JAVA-WEB开发.

    9. **RESTful API设计**:REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,常用于构建Web服务。了解如何设计RESTful API可以帮助你创建高效、可扩展的Web应用。 10. **版本控制...

Global site tag (gtag.js) - Google Analytics