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. 第28章 行为型模式大PK

    27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> ...

  2. I/O工作机制

    I/O问题是任何编程语言都无法回避的问题,可以说I/O是整个人机交互的核心问题,因为I/O是机器获取和交换信息的主要渠道.java的I/O操作类在包java.io下,大概有将近80个类,这些类大概可以 ...

  3. 使用PLSQL导入导出数据库

    Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作 Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操 ...

  4. luogu1022计算器的改良[noip2000提高组Day1 T1]

    题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先生. ...

  5. EditText限制输入字符类型的几种方式

    最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1.第一种方式是通过EditText的inputType来实现,可以通过xml或者Java文件来设置.假如我 ...

  6. 利用substring()方法,把一个表的不同分级所对应的字段名取出来。

    实例:现在有一个物料分类的表.知道表的第四级的值,要取前面的2,3级值. 例如,如图所示: 可以通过取前面几个字段的值,得到对应级别的值.利用substring(),但是因为要写在一句话里. 因此可以 ...

  7. webpack常用加载器和插件

    css文件加载器: style-loader,css-loader,sass-loader,less-loader //style和css加载器必须放在一起使用,且style必须放前面(style!c ...

  8. js的client详解

    clientWidth:可视区宽       说明:样式宽+padding clientHeight:可视区高       说明:样式高+padding elem.clientWidth //获取元素 ...

  9. Centos5.8 安装SVN并配置HTTP访问

    安装 svn sudo yum install subversion 测试 svn --version 安装 httpd 的 svn 模块 sudo yum install mod_dav_svn 前 ...

  10. Github 简明教程

    http://www.runoob.com/w3cnote/git-guide.html http://rogerdudler.github.io/git-guide/index.zh.html