http://blog.csdn.net/jia20003/article/details/8365585

分类: J2EE2012-12-21 21:55 6103人阅读 评论(2) 收藏 举报

写这篇文章是目的不是介绍Web-Service, 而是从Restful Web Service说起来剖析一下

什么才是真正的Restful Style的架构与协议,从而更好的理解web服务的设计理念与架

构本质。

一:Web Service基础知识

一个最简单web服务就一个web页面等待请求与处理。更容易理解的方式是Web

Service可以把一个应用变成一个基本WEB方式的请求与处理的应用。常见的两种

Web Service处理方式为:

a.      基于WSDL/SOAP的方式

b.      Rest方式

方式a是比较正统的,客户端调用必须先取得WSDL文件,然后生成调用的API才可

以使用。它不是我要说的重点,基本调用流程如下:

方式b是Rest方式,Rest的Web Service的设计原则是基于CRUD,其支持四种操作分

别为:

GET – 获取信息/请求信息内容,绝大多数浏览器获取信息时使用该方式。

POST – 增加信息内容,显示以前的信息内容,可以看作是insert操作

PUT – 更新信息内容,相当与update

DELETE – 删除信息内容可以看作是delete

Rest方式更加简单便捷,如果从设计原则上看HTTP协议本身已经是最Restful风格的

协议了HTTP协议很好的支持了CRUD的操作。正是因为如此,WEB2.0以来, 基于

Restful的Web Service越来越多的成为首选。

二:认识RestfulStyle

Rest的全称是可表述状态迁移(RepresentationalState Transfer), 可能从字面看有点奇怪

HTTP协议本身无状态协议,其保持连接通过设置请求头字段Connection: keep-alive与

设置过期时间来同时控制。其实Rest方式的WebService也是无状态的这样做的好处最少

有以下两个:

1.      更好的负载平衡,减轻服务器端负担

2.      更快的客户端响应,减少不必要的状态检查。

Restful 风格的兴起,要感谢互联网巨头Google,Facebook等他们提供大量基于Restful

风格的web服务,从谷歌地图到天气预报到翻译,国内的互联网巨头腾讯,新浪微博也

发布自己的web服务,吸引更多的开发者加入他们的阵营。Rest除了满足基本的CRUD

设计原则之外,还要遵循如下约定:

1.      资源操作可以通过描述来实现即Representation

2.      消息本身是无状态与自我描述(传输支持XML与JSON)

3.      可以发送与接受多个Representation

Rest风格(Restful Style)架构原则:

1.      客户服务器方式

2.      无状态协议传输

3.      支持缓存

4.      统一接口定义

5.      分层系统设计

这样发布了Rest的Web服务API其改变不会影响到客户端程序与实现。如果你的系统

不能适用Rest风格的架构怎么办,重新设计一个新的架构,扩展Rest风格架构。但是

这个世界上绝大数的系统与应用要做的事情就是CRUD。

三. Rest与HTTP

上面已经提到过HTTP协议可能是最Rest风格的协议,而HTTP1.1协议设计的一个原则

就要实现Rest风格。所以毫无疑问HTTP的GET, POST, PUT, DELETE就是最好的证明

但是Rest风格是否可以应用到其它一些协议与系统设计中嘛,答案是肯定的,一个最好

的例子证明就POP3协议, POP3支持Fetch 数据记录,查询记录,更新记录与删除记录

(记录代表email)多么完美的Rest风格协议。

已经存在的HTTP协议应用:

1.      浏览器客户端(你天天上网,不是IE就是Chrome,或者其它浏览器,你懂的)

2.      即时消息通信,MSN/Skype支持

3.      各种内容管理系统

4.      博客系统与微博客户端应用。

5.      你可以来补充/?

Rest消息详解:

1.      跟我们现在知道的HTTP URI没有什么分别,Google静态地图就是一个很好的例子

只是URL加上不同参数就可以fetch不同的地图内容。

2.      可以支持任何类型的数据传输,这点与基于XML与JSON的信息传输有点同,后者

更希望传输文本内容与结构化文本内容

3.      SOAP与XML-RPC有严格的消息格式限制,rest没有消息格式要求。客户端调用方

便啊!

Rest风格Web服务的好处,显然易见一个好处就是简化了客户端的调用,不再像WSDL

那般麻烦。从而减低第三方开发者的学习成本,减短了学习曲线。有利于服务推广与普

及,吸引更多用户数量从而带来潜在的商业利益。

在软件即服务(SaaS - Software As A Service)与软件即平台(PasS-Platform

As A Service)中有着重要的地位与应用。这正是那些互联网巨头对Rest风

格感兴趣的原因之一。

四:Rest风格架构

Rest风格可以用在非WEB的系统设计与架构中嘛/?打答案是肯定的,Rest可以用在任何

系统设计中,从本质是上Rest不是一种技术,而是一种架构原则,当然可以用来架构非

WEB的系统。系统越大风格越要象Rest方式如此才是一个成功的架构。

WEB中的面向对象编程

ExtJS, KendoUI(基于JQuery)等JavaScript库已经支持非常方便的从URL中fetch内容

更新数据,前端设计越来越趋向于更加细化的分层设计,而不仅仅是MVC。客户端

程序员应该更多的专注前台用户体验,由于这些框架良好的封装与可扩展行,

JavaScript等语言编程越来越多的引入面向对象的概念与实践。可以好不夸张的说如

今的JavaScript编程与十年之前已经有本质不同。

个人观点,仅供拍砖

Rest风格WEB服务(Rest Style Web Service)的真相的更多相关文章

  1. RESTful Web服务与“大”Web服务: 做出正确的建筑决策

    猜测:REST服务的不足之处 问题:WS- *与REST的争论 结论:REST在灵活性和控制方面得分更高,但需要大量的低级编码; WS- *提供更好的工具支持和编程接口方便,但引入了对供应商和开源项目 ...

  2. 【转】简述什么是Web服务(Web Service)技术?

          Web Service 是在 Internet 上进行分布式计算的基本构造块,是组件对象技术在 Internet 中的延伸,是一种部署在Web 上的组件.它融合了以组件为基础的开发模式和 ...

  3. Web服务(Web Service)相关概念

    1.概述 Web服务技术(Web Service )是一种面向服务的架构技术,通过标准的Web协议提供服务,保证不同平台的应用服务能够互相操作. 因为Web服务公布的数据基于XML格式和 SOAP协议 ...

  4. Webservices-2.C#创建web服务,及引用访问、代码访问

    注:web服务简介Webservices-1.web服务定义简介 以下均以C#语言为例 一.创建web服务(简单介绍,主要讨论客户端引用) 打开VS创建网站项目,在网站项目中添加“WEB服务(ASMX ...

  5. 常见的三种Web服务架构

    常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing ...

  6. Web服务,XFire的一个例子

    Web服务优点 互操作性:实现不同系统间的相互调用(语言无关.平台无关) Web服务是什么 Web 服务是一类应用程序,是能够用编程的方法通过Web调用来实现某个功能的应用程序 Web服务的体系结构 ...

  7. 如何测试Web服务.3

    -->全文字数:2254,需要占用你几分钟的阅读时间 ,您也可以收藏后,时间充足时再阅读- ->第一节讲了<Web服务基础介绍>,第二节讲了<Web服务测试工具> ...

  8. ASP.NET---如何使用web api创建web服务

    1 首先创建asp.net web空项目,并且创建模拟数据,我在工程下面创建了一个Models文件夹,在文件夹Nodels下面创建类Product和Repository 具体如下: [Serializ ...

  9. Web 服务编程,REST 与 SOAP(转)

    原文地址:Web 服务编程,REST 与 SOAP REST 简介 在开始我们的正式讨论之前,让我们简单看一下 REST 的定义. REST(Representational State Transf ...

随机推荐

  1. NIO中Selector分析

        NIO中,使用Selector.select()方法来侦听是否有数据可以读/写,服务端开始执行时,如果没有客户端,这里的语句将进行阻塞,等待下面三个情况出现,才会进行后续的方法之行,这里是重点 ...

  2. web app 变革之rem

    rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...

  3. Windows server上rsync的安装和使用

    获取和安装 首先从rsync官网下载软件的安装版本,注意这里要下的是客户端版本,而非服务端版本. 下载完成之后,双击"cwRsync_4.0.5_Installer.exe"图标, ...

  4. .net利用本地播放器播放视频文件代码

    前台点击按钮,执行js事件,跳转到后台代码: function funShowVideo(index) {            var iTop = (window.screen.availHeig ...

  5. leetcode 140. Word Break II ----- java

    Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...

  6. leetcode 110 Balanced Binary Tree ----- java

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  7. linux下c语言实现计算磁盘剩余空间

    #include <sys/statfs.h> unsigned ; size_t mbFreedisk = ; unsigned ; size_t mbTotalsize = ; str ...

  8. Javascript高性能动画与页面渲染

    转自:http://www.infoq.com/cn/articles/javascript-high-performance-animation-and-page-rendering No setT ...

  9. Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

    http://www.51itong.net/android-badgenumber-9789.html Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒 ...

  10. Java——正则表达式(字符串操作)

     public class Test1 { /* * 正则表达式:对字符串的常见操作: * 1.匹配: *  其实是用的就是string类中的matches(匹配)方法. * 2.切割 *  其实 ...