REST WebServices学习
围绕面向服务的体系结构SOA(Service Oriented Architecture,SOA)的讨论很多,围绕如何正确实现SOA的讨论很多。如何构建灵活的异构系统,如何集成现有的系统,如何让异构系统进行通信?虽然当前主流的方式明显地集中在基于SOAP、WSDL和WS-*规范的Web Services领域,但也有少数人主张更好的方式是REST,Restful WebService,或者RESTful HTTP。那什么是REST?
REST是 Representational State Transfer (表述性状态转移)的缩写。为什么提这个名字?
Client application transfers state with each resource representation. This is REST.
通过超文本传输协议(HTTP)发送简单的消息来实现 SOA,这基本上就是 REST 式 Web 服务 (RESTful Web services) 的工作方式。REST并不是一个协议或技术;它是一种体系结构风格。
REST 是 SOAP 的轻量型替代品,它是面向资源的,而不是面向操作的。它常常被归结为远程过程使用 HTTP 调用 GET、POST、PUT 和 DELETE 语句。我认为,这只是第二个重要的步骤。 (第一个(也是最重要的)步骤是把所有资源建模为 URL 形式。)
(*) REST比较简单朴素,在安全性,可靠消息传输,或标准化的业务过程自动化上还没有定义。(REST很适合面向数据的应用,但对于面向服务/面向方法的应用,比如需要事务、严密的安全性等等这些更高级的操作的应用来说,采用基于WS-*的方案显得更有道理。)
从基本原理层次上说,REST 样式和 SOAP 样式 Web Service的区别取决于应用程序是面向资源的还是面向活动的。例如,在传统的WebService中,一个获得天气预报的webservice会暴露一个WebMethod:string GetCityWether(string city)。而RESTful WebService暴露的不是方法,而是对象(资源),通过Http GET, PUT, POST 或者 DELETE来对请求的资源进行操作。在 REST 的定义中,一个 Web Service总是使用固定的 URI 向外部世界呈现(或者说暴露)一个资源。可以说这是一种全新的思维模式:使用唯一资源定位地址 URI,加上 HTTP 请求方法从而达到对一个发布于互联网资源的唯一描述和操作。
RESTful HTTP核心操作包括:
- GET - 该操作返回已标识资源的状态表示。您可以通过大量的上下文要素来确定状态,例如谁正在提交请求、操作的参数(传入的参数如 HTTP 头或者查询字符串参数)和服务提供方维护的当前会话状态。
- POST - 该操作执行对已标识资源的一些特定于应用程序形式的更新。该操作行为完全依赖于实现它的服务。由该操作返回的数据也完全依赖于应用程序。举例来说,像 GET 操作一样,它可以返回一个状态表示,它还可以选择根本不返回任何数据。
- PUT - 该操作在已标识位置(URI)创建新资源。操作输入必须包括一个资源的状态表示。它完全依赖服务来创建基于这个状态表示的资源。
- DELETE - DELETE 操作销毁已标识位置(URI)的资源。
REST是无状态的,服务器无需知道当前操作的上下文,或者上一次操作的情况。这能够提高系统的可伸缩性,是因为它强制所有操作都是stateless的,这样就没有context的约束,如果要做分布式、做集群,就不需要考虑context的问题了。同时,它令系统可以有效地使用pool。REST对性能的另一个提升来自其对client和server任务的分配: server只负责提供resource以及操作resource的服务,而client要根据resource中的data和 representation自己做render。这就减少了服务器的开销。
在设计 REST 式 WebService时,可以采用以下四个步骤:
- 决定资源及其描述性 URL。(通过url来设计系统的结构则整个系统就是由这些resource组成的,注意设计思维方式的不同)
- 为每个 URL 上的通信选择一种数据格式。
- 指定每个资源上的方法。
- 指定返回的数据和状态码。
具体示例点击此处参考IBM developworks的文章。
WCF 3.5对REST的支持
微软提供的例子: Windows CardSpace Samples
WCF REST 快速上手: WCF REST over HTTP Service
新闻:The new WCF Web Programming Model supports REST Design
IBM孵化器项目ProjectZero:
SOA中的RESTful应用程序(1)
SOA中的RESTful应用程序(2)
以下这篇文章深入浅出的讲述了什么是REST web service, 以及和传统Web service的区别: 《Everything about REST web services - What and How》
Part I
Part II
Part III...(Coming soon)
其他文章和资源:
A Brief Introduction to REST
How to Create a REST Protocol
Building Web Services the REST Way
REST WebServices学习相关推荐
- 高级Java软件工程师学习资料
目标:培养高端Java企业级软件开发工程师 + 正规学历 当今软件市场人才需求火爆,国内和国际对于专业软件开发技术人才和外包软件人才极其匮乏,市场对高端Java软件工程师的需求尤其旺 ...
- 开源的库RestSharp轻松消费Restful Service
现在互联网上的服务接口都是Restful的,SOAP的Service已经不是主流..NET/Mono下如何消费Restful Service呢,再也没有了方便的Visual Studio的方便生产代理 ...
- 《博客园精华集》WebService 篇(共79篇)
转自(http://www.cnblogs.com/jacklaw/archive/2008/06/14/1222107.html) 深入学习Web Service系列之异步开发模式 作者:Terry ...
- Android使用ksoap2-android调用WebService学习
之前主要做客户端UI交互,很少处理数据和接触服务端,但现在的移动设备根本不可能离得开网络连接,数据的交换.最近学习的是在android端如何去调用远程WebService,都说WebService是一 ...
- 学习CAS实现SSO单点登录
学习CAS实现SSO单点登录 网上找了几篇比较详细的教程,在这记录一下: 原理: CAS实现SSO单点登录原理 教程: 1.CAS实现单点登录(SSO)经典完整教程 2.SSO之CAS单点登录实例演示 ...
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日)
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日) 本周Silverlight学习资源更新 用Silverlight做淘宝应用 往事如锋 基于 Si ...
- 学习 PHP SOAP 扩展的一些笔记
对 SOAP 的相关学习就先告此一段落,这是最后一篇文章用来记录下学习过程中的一些笔记和心得. 前面三篇文章分别是: <SOAP 介绍> <SOAP Web 服务介绍> < ...
- Spec Explorer 工具学习
基础概念:http://blogs.msdn.com/b/sechina/archive/2009/12/28/test.aspx 在线教程:http://blogs.msdn.com/b/sechi ...
- Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理
本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...
最新文章
- 软件能力[置顶] 程序员如何成为设计师,软件公司如何成为苹果?
- 前缀和与差分的使用(新手快速入门)
- 【数据结构与算法】之深入解析“我的日程安排表I”的求解思路与算法示例
- java redis 商品秒杀_redis编写lua脚本实现商品秒杀
- mysql win10 优化设置_windows10如何优化?系统优化设置方法
- 牛客 动物森友会(最大流+二分)
- python 可视化设计_可视化Python设计工具
- 近世代数-群论基础一
- 开源音乐下载神器XMusicDownloader更新,支持歌单一键下载,支持无损音乐
- Linux 文本去重——uniq
- i5 9600k和i5 9400的差距?哪个好?对比才知道
- yylabel支持html ios,iOS_YYLabel实现多标签,文字+背景功能
- 【深度学习Deep Learning系列】word2vec和doc2vec
- 上位机编程软件哪个好_UG、Mastercam、Cimatron、Powermill等 数控编程学哪个软件好呢...
- m1电脑推荐使用Google Chrome浏览器
- 如何在树莓派上进行python编程_树莓派Python编程指南
- Unity的[Obsolete]属性
- 重度抑郁症患者的脑龄
- 专访百度AI交互设计院院长关岱松:感知类学科的尽头都是心理学 | 甲子光年
- 获得旅行青蛙无限三叶草方法及apk
热门文章
- ubuntu下apache rewrite的设置
- mysql定时执行存储过程
- 如何下载 Intel Integrated Performance Primitives –intel IPP
- [导入]ASP.NET26个常用性能优化方法
- nyoj--1007 GCD
- hdu 4501 小明系列故事——买年货 多重背包
- anyproxy学习4-Linux(Centos)搭建anyproxy环境
- 4 项目开发 - 后台
- C#静态类 转载:(原文:http://www.cnblogs.com/chenlulouis/ )
- JetBrain WebStorm 注册码