rest,即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
REST提出了一些设计概念和准则:
1.网络上的所有事物都被抽象为资源(resource);
2.每个资源对应一个唯一的资源标识(resource identifier);
3.通过通用的连接器接口(generic connector interface)对资源进行操作;
4.对资源的各种操作不会改变资源标识;
5.所有的操作都是无状态的(stateless)。
对于当今最常见的网络应用来说,resource identifier是url,generic connector interface是HTTP,第4条准则就是我们常说的url不变性。这些概念中的resouce最容易使人产生误解。resouce所指的并不是数据,而是数据+特定的表现形式(representation),这也是为什么REST的全名是Representational State Transfer的原因。举个例子来说,“本月卖得最好的10本书”和“你最喜欢的10本书”在数据上可能有重叠(有一本书即卖得好,你又喜欢),甚至完全相同。但是它们的representation不同,因此是不同的resource。
REST之所以能够简化开发,是因为其引入的架构约束,比如Rails 1.2中对REST的实现默认把controller中的方法限制在7个:index、show、new、edit、create、update和 destroy,这实际上就是对CURD的实现。更进一步讲,Rails(也是当今大部分网络应用)使用HTTP作为generic connector interface,HTTP则把对一个url的操作限制在了4个之内:GET、POST、PUT和DELETE。
REST之所以能够提高系统的可伸缩性,是因为它强制所有操作都是stateless的,这样就没有context的约束,如果要做分布式、做集群,就不需要考虑context的问题了。同时,它令系统可以有效地使用pool。REST对性能的另一个提升来自其对client和server任务的分配:server只负责提供resource以及操作resource的服务,而client要根据 resource中的data和representation自己做render。这就减少了服务器的开销。
Android系统与wcf Rest操作相关:
实例:在Android调用WCF服务
在Android开发中调用Rest web服务
微软MSDN的:
http://msdn.microsoft.com/zh-cn/library/cc656724.aspx
http://msdn.microsoft.com/zh-cn/library/bb412169.aspx
博客园:
http://www.cnblogs.com/wzd24/archive/2011/06/13/2080120.html
http://www.cnblogs.com/wcgwolf/archive/2008/10/16/1312244.html
实例:在Android调用WCF服务
使用WCF 4.0 构建 REST Service配置传值XML,Json
http://www.cnblogs.com/apiaceae/archive/2010/04/25/1720843.html#commentform
WCF REST 工作总结(一)
WCF REST 工作总结(二)
其他文章:
[01] 一个简单的REST服务实例
[02] WebHttpBinding与消息编码
[03] Web消息主体风格(Message Body Style)
[04] 帮助页面与自动消息格式(JSON/XML)选择
[05] WebServiceHost有何特别之处?
[06] UriTemplate、UriTemplateTable与WebHttpDispatchOperationSelector
[07] 通过ASP.NET Output Caching实现声明式缓存
[08] 提高性能的一个有效的手段:条件资源获取(Conditional Retrieval)
[09] 解决资源并发修改的一个有效的手段:条件更新(Conditional Update)
Android 短信助手 (WCF + Android) (1)
Android 短信助手 (WCF + Android) (2)
http://mobile.51cto.com/android-245534.htm
通过url载入xml文档
using (WebClient wc = new WebClient()) { using (Stream s = wc.OpenRead( " http://www.meituan.com/api/v1/divisions " )) { using (StreamReader sr = new StreamReader(s)) { string str = sr.ReadToEnd(); Response.Write(str); } } }