REST读书手记
近来看了Jim Webber等REST实战,有一些体会,因此对一些概念做个简要的整理。以下是个人认识与理解,如有偏差,望指正。
1、URI隧道技术。通过URI来进行跨越系统边界转移信息的一种方式。它是通过将信息编码到URI中。如:http://www.taobao.com/PlaceOrder?size={xx}&type={xx}&color={xx}这是一种有效的方法。因为无论在Server端还是Client端,它都容易被理解。但是在一般情况下,URI隧道技术并非是Web友好的。因为它没有描述对资源进行操作的方式、以及操作资源时使用的元数据。如果有消费者使用Get操作来操作以上URI而产生资源,那么就完全违背了Web的架构原则。
2、CRUD的WebService。 在说到CRUD之前,先说说幂等。
幂等是数学上的概念。无论操作操作多少次,这次操作产生的结果都是一样的。比如:数学中的计算绝对值。
2.1 C:Create。
Create 资源通过HTTP POST动作创建。POST在HTTP协议中就被设计为不安全、不幂等。为什么说它不安全?因为消费者将信息POST到服务中,服务就需要为客户端创建资源。这样就有可能改变服务端资源的多少、组织形式等等。为什么说它不幂等呢?
因为根据HTTP协议的规范,POST信息到服务端后,服务端就需要创建资源。一次POST就创建一个新的资源,即使消费者每次提交的信息完全一致。
2.2 R:Read。
Read读取资源。通过HTTP GET操作获取。即安全又幂等。因为它多次获取资源,但是不会对资源的状态进行操作,所以说它是安全的。
也许有人会说,如博客园获取48小时阅读排行,那按照幂等的说法就应该每次都获取一样的信息,而不会有更新出现。是的,你这种说法没错。如果每次获取资源都一样那就应该不会更新。这里所说的幂等指的是这类资源的性质是一致的。而不是说资源的表述每次都应该一样。
2.3 U:Update。
PUT 操作进行资源的更新。它幂等但是不安全。幂等表现在它对资源的多次操作,最终在服务端,按照HTTP标准,应该用客户端上传过来的信息完全替换掉服务端相应的资源。因为这可能导致服务端资源状态发生变更,所以它不安全。
PUT 操作完成以后,返回给客户端一个200相应消息的详细描述或者204 no content 信息。但后者由于相应信息少,因此效率更高。当然在最新的IETF Internet标准中新增了PATCH动词,但是PATCH是对部分资源发送补丁信息,服务端针对这些信息对资源进行部分更新。
2.4 D:DELETE.
DELETE删除资源。与Update操作一样,幂等但是不安全。注意:这里的DELETE不一定是真要是服务端删除某一资源,只是表明REST某一客户端对这一资源已经不再关心,但是这些资源可能会被其他客户端所用到。
在分布式系统应用中,经常出现多个消费者与一个资源交互的应用场景。这样就有可能导致一个问题的发生。比如:一个用户对资源进行操作而改变了它的状态,而另一消费者没有通过Get获取到最新状态,同样去操作这一资源就不会得到想要的结果。
HTTP提供了一种简单但是强大的机制来解决这个问题。那就是通过实体标签(Entity Tag)与条件请求头(Conditional Request Header)If-Match或If-None-Match的形式,对所请求的资源进行校正。一个实体标签就是一个不透明的令牌,使服务端与资源关联起来,以便在资源的生命周期中唯一。可以通过Hash算法来指定ETag值。
If-Match或If-None-Match很好理解,如果匹配则如何,如果不匹配又如何处理。
通常If-Match:"*",来指明资源存在,If-None-Match:"*"则指明资源不存在。
篇幅有限,这节就这么多了。希望对你理解REST有些帮助。
下一节将介绍:超媒体服务、以及相关的一些概念知识点。
随笔档案 - 2011年11月
Jquery+JSON消费REST WCF4.0 服务(带源码) 2011-11-25 19:39 by tyb1222, 1684 visits, 网摘 , 收藏 , 编辑
摘要: 作为一种以HTTP协议为基础的WCF 服务,只要客户端能模拟进行HTTP请求,都能成为服务的消费者。之前写过《对Jquery+JSON+WebService的一点认识》,觉得在REST是基于HTTP协议的,AJAX的操作也应该一样。但是事实上还是有些差别的。由于网上资源聊聊无几,因此记录下自己的个人体会。希望对你有些帮助! 本篇主要讲述的类容为在ASP.NET中,如何通过AJAX来消费REST服务。 使用JQUERY框架模拟AJAX请求时,操作类型主要有GET、POST两种。本节也以这两种常用的方式来进行介绍。(type (String) : (默认: "GET") 请求方 阅读全文
13 Comment Categories: Asp.Net , WCF , REST
在REST WCF中使用HTTP Header进行数据交互 2011-11-23 18:42 by tyb1222, 785 visits, 网摘 , 收藏 , 编辑
摘要: 我们知道,在HTTP协议的报文头Header中存放着许多信息。如果你读过老A的《通过添加HTTP Header实现上下文数据在WCF的自动传递》,那你一定知道如何通过底层的扩展来实现如何在REST WCF中使用HTTP Header来进行数据交互。这对于大家更多的了解WCF的底层机制有很大的帮助作用。 窃以为:在实际的REST WC应用中,想通过Header头来实现数据交互不用那么麻烦。MicroSoft在它所提供的库中就已经为我们封装好了一些接口,可以很容易的让我们实现这一功能。 HTTP Header报文头可以在Server与Client之间传递很多数据。我们可以获取这些数据然后进... 阅读全文
3 Comment Categories: WCF , REST
REST WCF 使用Stream进行Server与Client交互 2011-11-18 19:08 by tyb1222, 904 visits, 网摘 , 收藏 , 编辑
摘要: 上节介绍了REST WCF 4.0相比3.5支持更多的交互格式,本篇就说说在Server与Client间通过最原始的流的格式进行通讯。开篇之前,介绍REST WCF 的一个特性:DescriptionAttribute。对这个特性相信都很熟悉,它的作用如同在WebService中通过它来标注出某个接口的描述信息,在REST WCF中同样如此。将它标注在REST WCF 接口中后,在help页面中将会显示接口的描述信息。 如以往,本篇将通过Demo的形式介绍如何在REST WCF中使用Stream。Demo的功能有以下几点: 1、通过Stream的形式获取服务端的图片资源,并保存到本地 ... 阅读全文
4 Comment Categories: WCF , REST
REST WCF 4.0 新特性简介 2011-11-16 17:35 by tyb1222, 994 visits, 网摘 , 收藏 , 编辑
摘要: 前面几节介绍了REST WCF 3.5的一些基本特性以及使用方式,在WCF4.0的时代,也做了对REST的支持。相比3.5时代,4.0改进体现有如下几点:增加对路由的支持对缓存的支持。帮助(help)页面的改进。消息错误处理消息格式的多样性如(XML\JSON\ATOM\TEXT\BINARY)简化操作。 本节讲述的重点为如何使用路由注册REST服务、缓存以及help页面 1、使用路由注册服务。 WCF4.0中新增的路由服务可以帮助直接注册服务,而不再需要SVC的文件。 需要注意的是,使用路由注册服务时必须启动ASP.NET的兼容模式。即设置aspNetCompatibilityE... 阅读全文
2 Comment Categories: WCF , REST
.Net Remoting与WCF实现Server与Client通讯比较 2011-11-12 20:26 by tyb1222, 1048 visits, 网摘 , 收藏 , 编辑
摘要: .Net Remoting是微软早前推出的一项分布式通讯技术框架,在.Net架构的程序中有着比较广泛的应用。在WCF中,已经集成了Remoting的技术。不过,他们有着很多相同的概念,如:信道(Channel)、代理(Proxy)、寄宿(host)等。在如今仍有一些分布式系统应用中运行着由Remoting技术构建的系统。本文将描述在服务端与客户端的交互中,他们各自的实现方式。 1、Remoting的实现。 在Remoting中,远程对象是一个重要的概念。服务端通过将它注册到制定的信道中,客户端服务... 阅读全文
0 Comment Categories: .Net Remoting技术 , WCF
Jquery部分函数说明 2011-11-10 00:48 by tyb1222, 18 visits, 网摘 , 收藏 , 编辑
摘要: 1、find函数:搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。 里面搜索的表达式不应该用ID,那样就找不到指定元素了。 阅读全文
0 Comment Categories: JS&Jquery
对REST架构 风格下WCF的一点补充 2011-11-09 20:47 by tyb1222, 831 visits, 网摘 , 收藏 , 编辑
摘要: 这几天思考REST 架构下POST复杂数据类型的问题查了写资料,以及通过与WCF 大牛------Frank Xulei进行了一番交流对REST有了一些进一步的认识。本篇作为:1、REST与SOA两种架构下WCF的异同比较 2、通过HTTP协议标准动作使用REST WCF 服务这两篇的一个补充。 起因是这样的:在SOA架构下,一般都是通过定义服务契约的方式最终通过WSDL将元数据对外发布,以供调用者使用。也就是说在SOA中,通过服务契约定义向外公布服务对外提供的操作。如果先学习SOA,然后接触REST,可能会在使用REST的时候会沿用SOA下的一些习惯。我在进行REST架构下的WCF学... 阅读全文
0 Comment Categories: WCF , REST
通过Fiddler测试你的 REST WCF服务 2011-11-07 18:23 by tyb1222, 1164 visits, 网摘 , 收藏 , 编辑
摘要: Fiddler是一款强大的软件,在实际的开发中它能帮助我们跟踪HTTP请求,记录发送请求和获取到请求结果的数据。使用VS2008的时候,一直是用IE6浏览调试,使用Fiddler也正常。但本人一直习惯用FireFox,可怜用它访问的时Fiddler却不能帮助记录下数据(FireFox版本:4.0)。还以为Fiddle只能在IE下使用,试了试chrome,发现也可以用。言归正卷,本篇针对上篇中的REST服务(具体例子以及带代码采用上节中介绍的:通过HTTP协议标准动作使用REST WCF 服务)使用Fiddler简要做一个介绍。首先大致说说Fiddler的界面,如图: ... 阅读全文
3 Comment Categories: WCF , REST
通过HTTP协议标准动作使用REST WCF 服务 2011-11-02 18:25 by tyb1222, 1079 visits, 网摘 , 收藏 , 编辑
摘要: 前几节介绍了REST WCF 服务的一些基本的特点,本节说明一下,如何基于HTTP的标准动作来使用REST WCF 服务。由于RESTful服务的架构风格基于HTTP协议,并且其设计原则中明确指出:通过通用的连接器接口来使用资源。对于REST架构风格的服务,主要通过它8个动作中的4个来使用资源,即:GET,POST,PUT,DELETE。 在RESTful 服务中,GET,POST,PUT,DELETE的标准操作如下: GET:获取资源 POST:修改资源 PUT:创建资源 DELETE:删除资源本节涉及的要点如下:1、如何定义接口规范,使客户端通过能通过HTTP协议的标准动作来... 阅读全文
3 Comment Categories: WCF , REST
REST下的WCF的寄宿方式 2011-10-28 15:50 by tyb1222, 865 visits, 网摘 , 收藏 , 编辑
摘要: 如同SOA下的WCF,REST架构下的WCF也有多种多样的寄宿方式,如IIS寄宿,自寄宿等等,即使它只有一种协议。由于REST基于HTTP协议的特点,所以这种架构下的WCF寄宿时,需要有Web服务器的支持。那么很显然,微软肯定会使用自己的Web服务器IIS了。本节目录:1、IIS寄宿2、控制台程序寄宿(暂且将它称为自寄宿)当然,REST WCF还有其他的寄宿方式,我这里只挑出典型的两种给大家介绍。有兴趣的朋友不妨试试其他的寄宿方式。本节中所使用的实例还是上节所使用的例子。Demo结构图如下:结构说明:Client为服务消费者,Contracts定义服务契约、数据契约,Services定义服.. 阅读全文
6 Comment Categories: WCF , REST
REST与SOA两种架构下WCF的异同比较(含源码) 2011-10-27 17:19 by tyb1222, 1235 visits, 网摘 , 收藏 , 编辑
摘要: REST(Representational State Transfer)与SOA(Service-Oriented Architecture)作为当今软件架构中主流的两种架构思想在当前开发过程中已经越来越流行。作为微软.NET平台下的下一代通讯技术,WCF也很好的体现了对他们的支持。那么他们到底有哪些差别又有哪些相同之处呢。?本篇将针对这个问题谈谈自己的认识,并通过Demo演示程序。本篇设计的内容如下: 1、REST的特性 2、SOA的特征 3、REST与SOA的共同点 4、REST与SOA的不同点 5、Demo程序说明*REST的特性。首先给出一张图:它基于HTTP协议,是一... 阅读全文
9 Comment Categories: WCF , REST
REST 架构风格下的WCF特性简介 2011-10-26 11:21 by tyb1222, 1418 visits, 网摘 , 收藏 , 编辑
摘要: REST(Representational State Transfer)作为一种优秀的架构风格,自诞生以来越来越受广大开发者的青睐。对没有接触过REST的开发人员,可以参阅本人的上一篇博客:对REST架构的理解及Jquery+JSON+RESTful WCF。由于REST推崇的简易型,以及基于HTTP协议的特点,它又有一些什么样的特性呢。?本问将围绕这个主题分两部分展开,并结合Demo程序加以介绍。第一部分介绍涉及到的知识点,第二部分介绍Demo。 主要涉及到的知识点如下: 1、绑定协议与行为(webHttpBinding 与webHttpBehavior) 2、Action的定义... 阅读全文
4 Comment Categories: WCF , REST
C# 中特性(Attribute)的使用简介 2011-10-24 17:00 by tyb1222, 1324 visits, 网摘 , 收藏 , 编辑
摘要: Attribute(特性)MSDN给出的定义: Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性 (Property)、返回值、结构或其他特性(Attribute)。在.Net程序中,可以使用特性(Attribute)来解决许多问题。如:将WebService中接口函数标记为WebMethod,将类标记为可序列化等等。 此外,我们也可以自定义Attribute,来实现我们需要的功能。但自定义Attribute必须继承自Attribute类。Attribut.. 阅读全文
3 Comment Categories: C#
对REST架构的理解及Jquery+JSON+RESTful WCF (附源码) 2011-10-24 02:50 by tyb1222, 1906 visits, 网摘 , 收藏 , 编辑
摘要: 最近看了一些REST架构风格的介绍,谈谈自己对REST的理解总结一下自己的认识。本文只最为个人阶段性的成果,供对REST开发有兴趣的童鞋参考。若有理解有误的地方恳请大侠指教。 REST看了好多天了,自己也写了一些DEMO程序加深了对他的理解。晚上突然发现还有个微软之前还发布过一个插件名称(WCF REST Starter Kit Preview 2.msi,下载地址:http://aspnet.codeplex.com/releases/view/24644),供给大家使用。供作为个人第一篇介绍REST风格的WCF文章,本文就从这个插件的最基本的使用说起。 本文分为两个部分: 1、R... 阅读全文
7 Comment Categories: WCF , REST
对Jquery+JSON+WebService的一点认识 2011-10-13 17:47 by tyb1222, 2285 visits, 网摘 , 收藏 , 编辑
摘要: Jquery作为一款优秀的JS框架,简单易用的特性就不必说了。在实际的开发过程中,使用JQ的AJAX函数调用WebService的接口实现AJAX的功能也成了一种比较普遍的技术手段了。WebService接口的实现,通常都是由OOP语言实现的。所以在WebService的接口函数中,难免可能会遇到除了简单数据类型的复杂数据类型。复杂的数据的数据类型机有可能是WebService接口中的参数,也有可能是WebService的返回值。本文所叙述的要点为:1、对于WebService接口复杂类型的参数,JQ调用的时候传入的JSON数据应该如何表示。?2、JQ对WebService调用获取JSON数据 阅读全文
16 Comment Categories: Asp.Net随笔档案 - 2011年7月
重写HttpModule机制 2011-07-25 00:48 by tyb1222, 1919 visits, 网摘 , 收藏 , 编辑
摘要: 写这篇文章,心里多少有些不安。主要是因为我对在web.config文件中对HttpModule进行多个自定义HttpModule的配置与之前一位牛人的见解有些不同【具体参见http://www.cnblogs.com/Jax/archive/2007/10/02/912884.html】。所以这篇文章仅仅只是我个人浅见,希望对HttpModule机制有深入了解的人能指出我理解有偏差的地方,同时也希望大家积极讨论,共同进步。 最近因为用SlickUpload,它做上传效果确实很拉风,功能也很强。但由于付费,使用之后一直有个div层显示,并且往它的官网上重定向。所以就萌发了重写HttpModul. 阅读全文
8 Comment Categories: Asp.Net
MvcContrib开源控件的表格显示 2011-07-24 18:29 by tyb1222, 1317 visits, 网摘 , 收藏 , 编辑
摘要: ASP.NET MVC里显示表格不像WebForm里那般容易。我归纳有以下三种方式:1JQERY+插件的方式。2、在页面通过 Foreach循环的方式做显示。3、使用开源控件,比如MvcContrib。MvcContrib是一个很出名的控件,功能上夜是足够的强大,包括对AOP的支持等。下面仅简单说说MvcContrib的初次使用体会。MvcContrib可以在CodePlex上下载。 网上也有一些大侠对MvcContrib的使用做个一些介绍,但是可能由于版本的问题,现在关于它的使用按照大鸟们得说法又不太一样。所以我将自己的使用经历记录下来,以供有需要的朋友们了解了解。当然,我也毕竟刚开始用,. 阅读全文
6 Comment Categories: MVC
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息