RESTful广泛运用于互联网服务,而在企业应用中,大部分场景仍然是RPC服务,这是由于企业应用的业务复杂性造成的。但是基于SOAP的RPC服务也存在很多的弊端,比如服务异步处理比较麻烦,大部分RPC服务仍然是阻塞性质的,即使在.net 4.5的今天,异步编程已经通过asyn/await极大简化的情况下。其中的原因也挺复杂的,有兴趣了解的可参考以下文章:http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx

简单得将以前的RPC服务进行异步封装是没有必要的。

因此,在适当场合可以考虑提供REST服务,当然REST服务与RPC服务的区别,优劣并不是仅体现在这方面,还有其它诸如跨平台性、可扩展性等方面,因为这两者的协议是完全不一样的,REST毕竟是基于HTTP协议,几乎适用于当前所有平台。

其实microsoft早在.net framework 3.5时期,就已经提供了REST的实现,当时是基于WCF技术,通过对操作增加WebGetAttribute,WebInvokeAttribute来实现GET,POST操作。不过由于其还是基于WCF框架,通过其管道来进行服务调用,还需要配置对应的webHttpBinding,因此个人感觉在.net 3.5时期,REST并未得到广泛应用,当然这也可能是由于我并未从事互联网行业的缘故。

到了.net framework 4时期,microsoft提供了web api这一套框架,用于支持REST服务的开发,最近段时间使用了下,觉得还是挺方便地,对HTTP协议提供了很好的支持,包括可以自定义Request,Response的Header,Content等等,目前我需要的功能,这套框架都能很好地提供支持。并且,服务能够直接通过浏览器,如Chrome,FireDebug等等调试,同时,与WcfTestClient类似,我们也可以用Fiddler之类的调试工具进行很方便的调试。

使用web api框架是很简单的,直接参照ASP.NET的入门文档(http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api),即可很快地搭建起来一个架子,并成功地提供REST服务,在这里我就不重复贴出实现代码了,其关键点如下:

1:通过NuGet获取Microsoft.AspNet.WebApi.SelfHost包,因为我一般使用自宿主模式,很少寄宿在IIS;

2:对需要提供服务的资源(resource)建立对应的controller,在REST中,一切的核心就是resource,围绕resource提供GET,POST,PUT,DELETE等操作,这点与RPC有很大区别,思维模式的转变很大;

3:提供宿主,运行即可,ASP.NET的入门文档中,宿主是Console Application,实际运行环境中,我一般寄宿在Windows service中,其实是非常类似的。

做完以上三部,咱们的REST服务就已经向外提供HTTP服务了。注意这里第3点有个需要注意的小细节,必须以管理员权限运行宿主进程,否则无法监听URL端口。

但正如上文第2点中所说,REST真正的难点,个人感觉并不在技术实现上,其实是一种思维模式的彻底转变,由长久以来RPC服务中业务活动流程为中心的服务设计思想,转变为资源为中心的设计思想,在这样的思维模式下去对我们实际场景中的各种服务进行与以往相比颠覆性的重新设计,才是REST真正的难点所在。

这篇随笔先写写这些,算是个基础入门,架子打起来算是勉强摸了下门槛,之后的工作才是任重道远。

提供RESTful服务的更多相关文章

  1. 使用CXF开发RESTFul服务

    相信大家在阅读CXF官方文档(http://cxf.apache.org/docs/index.html)时,总是一知半解.这里向大家推荐一本PacktPub.Apache.CXF.Web.Servi ...

  2. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  3. Swift是一个提供RESTful HTTP接口的对象存储系统,目的是为了提供一个和AWS S3竞争的服务

    Swift是一个提供RESTful HTTP接口的对象存储系统,最初起源于Rackspace的Cloud Files,目的是为了提供一个和AWS S3竞争的服务. Swift于2010年开源,是Ope ...

  4. 让你的 wowza server提供 RESTful web 服务

            有时我们 nginx 须要和 wowza 服务器交互以进行一些 LB 事宜:有时我们的管理员须要实时了解 wowza 服务器的一些其它状态信息(比方一些自己定义对象的状态等等).而用 ...

  5. java 利用JAX-RS快速开发RESTful 服务

    JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...

  6. atitit.RESTful服务的概览and框架选型

    atitit.RESTful服务的概览and框架选型 1. REST基础概念: 1 2. URL说明: 1 3.  1 4. RESTful框架选型 2 1. spring mvc( recomm) ...

  7. 使用多种客户端消费WCF RestFul服务(四)——Jquery篇

    Jquery篇 互联网开发中少不了各类前端开发框架,其中JQUERY就是最流行之一,本篇我们就采用JQUERY来消费WCF RestFul服务,其中用到JSON基础知识,如果有想了解的朋友,请访问:& ...

  8. 使用 Struts 2 开发 RESTful 服务

    REST 简介 REST 是英文 Representational State Transfer 的缩写,这个术语由 Roy Thomas Fielding 博士在他的论文<Architectu ...

  9. RESTful服务的版本管理经验 (转)

    原文:RESTful服务的版本管理经验 最近,Howard Dierking将在设计NuGet API的下一个主要修订版(v3)时新学到的经验,与他在大约一年前的观念做了对比,并写道:使用服务器驱动的 ...

随机推荐

  1. TCP聊天工具

    //前台书写 import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java ...

  2. 使用 Flash Builder 的 Apple iOS 开发过程

    使用 Flash Builder 的 Apple iOS 开发过程   iOS 开发和部署过程概述 构建.调试或部署 iOS 应用程序前的准备工作 在测试.调试或安装 iOS 应用程序时选择的文件 将 ...

  3. 在ubuntu14.04设置静态ip

    打开网络的配置文件 sudo vim /etc/network/interfaces 选择网卡,我这里是有线网卡eth0,设置静态ip为192.168.1.108 auto eth0 iface et ...

  4. java 24 - 2 GUI之监听机制和适配器改进窗口关闭

    我们创建了窗体后,就要对窗体进行操作,比如关闭窗口.而这时候就要建立监听机制: 事件监听机制: A:事件源 事件发生的地方 B:事件 就是要发生的事情 C:事件处理 就是针对发生的事情做出的处理方案 ...

  5. vijos1059 积木城堡[n年浙江省队第X轮](背包的方案总数 or 01背包)

    描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大, ...

  6. Treap入门(转自NOCOW)

    Treap 来自NOCOW Treap,就是有另一个随机数满足堆的性质的二叉搜索树,其结构相当于以随机顺序插入的二叉搜索树.其基本操作的期望复杂度为O(log n). 其特点是实现简单,效率高于伸展树 ...

  7. Win10添加简体中文美式键盘的方法

    在Win10中很多朋友发现没有简体中文(美式键盘)的选项,而如果使用“英语-美式键盘”作为默认输入法,有ModernApp的界面会变成英文,这十分不方便,那么有没有方可以在Win10中添加一个 简体中 ...

  8. IT教程网

    这个IT教程网(印度),我认为是最好的.里面的知识基础实用,覆盖面很广,作为IT入门和了解都是极好的. http://www.tutorialspoint.com/

  9. PHP中$_SERVER的详细参数与说明

    $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. $_SERVER['argc'] ...

  10. 重构Web Api程序(Api Controller和Entity)续篇

    昨天有写总结<重构Web Api程序(Api Controller和Entity)>http://www.cnblogs.com/insus/p/4350111.html,把一些数据交换的 ...