提供RESTful服务
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服务的更多相关文章
- 使用CXF开发RESTFul服务
相信大家在阅读CXF官方文档(http://cxf.apache.org/docs/index.html)时,总是一知半解.这里向大家推荐一本PacktPub.Apache.CXF.Web.Servi ...
- Python flask 基于 Flask 提供 RESTful Web 服务
转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...
- Swift是一个提供RESTful HTTP接口的对象存储系统,目的是为了提供一个和AWS S3竞争的服务
Swift是一个提供RESTful HTTP接口的对象存储系统,最初起源于Rackspace的Cloud Files,目的是为了提供一个和AWS S3竞争的服务. Swift于2010年开源,是Ope ...
- 让你的 wowza server提供 RESTful web 服务
有时我们 nginx 须要和 wowza 服务器交互以进行一些 LB 事宜:有时我们的管理员须要实时了解 wowza 服务器的一些其它状态信息(比方一些自己定义对象的状态等等).而用 ...
- java 利用JAX-RS快速开发RESTful 服务
JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...
- atitit.RESTful服务的概览and框架选型
atitit.RESTful服务的概览and框架选型 1. REST基础概念: 1 2. URL说明: 1 3. 1 4. RESTful框架选型 2 1. spring mvc( recomm) ...
- 使用多种客户端消费WCF RestFul服务(四)——Jquery篇
Jquery篇 互联网开发中少不了各类前端开发框架,其中JQUERY就是最流行之一,本篇我们就采用JQUERY来消费WCF RestFul服务,其中用到JSON基础知识,如果有想了解的朋友,请访问:& ...
- 使用 Struts 2 开发 RESTful 服务
REST 简介 REST 是英文 Representational State Transfer 的缩写,这个术语由 Roy Thomas Fielding 博士在他的论文<Architectu ...
- RESTful服务的版本管理经验 (转)
原文:RESTful服务的版本管理经验 最近,Howard Dierking将在设计NuGet API的下一个主要修订版(v3)时新学到的经验,与他在大约一年前的观念做了对比,并写道:使用服务器驱动的 ...
随机推荐
- date时间函数
时间函数: date();和time();的相互转换 time(); 在PHP中单位是秒,在js中是毫秒. microtime(); 毫秒 date('Y-m-d H:i:s',time()); ...
- 十种MySQL报错注入
1.floor() select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand ...
- javascript删除元素节点
1.删除元素父节点 function removeElement(_element){ var _parentElement = _element.parentNode; if(_parentElem ...
- jquery.validate.min.js 用法方法示例
页面html 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- Openjudge 1.13-40 提取数字串按数值排序
40:提取数字串按数值排序 查看 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个字符串,请将其中的所有数字串提取,并将每个数字串作为整数看待(假设可以用int 表示),按从 ...
- [转]ReactPHP── PHP版的Node.js
FROM : http://www.csdn.net/article/2015-10-12/2825887 摘要:ReactPHP作为Node.js的PHP版本.在实现思路,使用方法,应用场景上的确有 ...
- c++ typeid获取类型名-rtti
typeid操作符的作用就是获取一个表达式的类型.返回结果是const type_info&.不同编译器实现的type_info class各不相同.但c++标准保证它会实现一个name()方 ...
- 直流调速系统Modelica基本模型
为了便于在OpenModelica进行仿真,形成一个完整的仿真模型,没有使用第三方的库,参照了DrModelica的例程,按照Modelica库的开源模型定义了所用的基本元件模型. 首先给出一些基本类 ...
- struts2 Result Type四个常用转跳类型
Result的四个常用转跳类型分别为 Dispatcher 用来转向页面,是Struts的默认形式 Redirect 重定向到一个URL Chain 用来处理Action链 RedirectAc ...
- HTTP 状态代码表示什么意思?
HTTP 状态代码表示什么意思? 如果某项请求发送到您的服务器要求显示您网站上的某个网页,服务器将会返回 HTTP 状态码响应请求.此状态代码提供关于请求状态的信息,一些常见的状态代码为: 200 - ...