阅读更多
Rop(Rapid Open Platform)是借鉴淘宝开放平台(TOP,Taobal Open Platform)实现的全功能Rest Web Service 开源框架(Full-Stack)。 它高于CXF、Aixs等一般的纯技术Web Service框架,提供了请求/响应序列化、数据检验、会话管理、安全管理等高级主题的东西。最值得一提的是其参考TOP,提供了一个可扩展的错误处理模型,使开发平台级的Web Service的难度大大降低。

本期我们采访了该框架的作者陈雄华,请他来谈一谈该框架的开发和使用相关的情况。

欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,如果您和您的团队希望展示创业理念和有趣之处,或者有朋友正在创造这样的价值,请联系我们,发站内短信给ITeye管理员或者发邮件到webmaster@iteye.com即可。

先来个自我介绍吧! Top

大家好!我是陈雄华,ITeye网名是stamen,对Spring、Oracle、云计算、敏捷开发感兴趣,擅长企业应用和大型电子商务网站的架构和设计。


毕业到现在整10年了,参与过10多个大型企业应用系统的开发,一直和Java厮混,是一个不折不扣的老Java程序员,对技术高峰身虽不能至而心向往之。曾在一家公司做系统架构师时,构建了一个类似于普元的模型驱动快速开发平台,据说很多程序员都有一个开发平台梦,这个梦我算是基本实现了:)。

近几年从事互联网电子商务B2B平台、B2C平台的设计和开发工作,接触到了很多互联网的技术,如memcached、Elasticsearch、Hadoop等。庆幸自己既有企业应用开发的经历,又能从事互联网系统的开发,毕竟企业应用和互联网应用的鸿沟还是挺深的。

应用开发之余,喜欢写些文字,写有《精通JBuilder 2005》、《精通Spring 2.x》及《Spring 3.x企业应用开发实战》等几本书籍,在IBM、CSDN、it168发表过几十篇技术文章,颇受读者的喜欢。

Rop是什么? Top

Rop,即Rapid Open Platform,它参考了TOP (Taobao Open Platform:淘宝开放平台)的设计思路,充分借鉴Spring MVC的技术架构原理而开发的一个快速服务开放平台开源框架。

Rop不同于传统的CXF,Axis这些SOAP Web Service框架,也不同于Jersey、Restlet这些Rest Web Service框架,因为这些Web Service框架都是技术层的框架,而Rop是应用层的平台框架,它不但可以方便快捷地开发一个个Web Service服务,还提供了构建服务平台众多领域问题的整体解决方案。因此——

传统的Web Service框架帮助你建造房子,而Rop框架帮助您建造城市。

Rop项目的由来?设计思想是什么? Top

中图一购网是一个整合图书上下游供应链的B2B网站,网站需要和图书供应链上下游的ERP系统实现信息对接。因此,早期中图一购网采用REST Web Service打造网站的服务总线,作为技术总监,一般是由我定义服务接口及报文。在定义服务报文时,我发现一个最大的困难是定义服务的错误类型,任何一个服务的正确报文只有一个,但是错误的情况不胜枚举。所以服务报文往往会漏掉一些潜在的错误情况,一旦服务端发生这些错误,客户端就瞎了。

所以,那时候,一旦需要新增服务或变更服务,我头就大了,往往是底下的开发人员在催我:服务报文定义好没有?或是抱怨,老大,你服务报文这个错误好像没有考虑到啊?

我不情愿地发现,开发一个服务很简单,但是设计服务报文难度却很大。痛定思痛,才去TOP、豆瓣等开放平台中取经,我发现TOP的错误模型定义得非常“大气”,经过分析才知道TOP的错误模型是收敛的,也即TOP已经对服务平台的各种错误建模好了,你不再需要为定义错误类型、设计错误代码而抓腮挠耳了,直接套用就可以了。

另一个发现是,TOP的服务API非常友好,它摒弃了REST所宣扬的为每个服务设计一个达意的URL理念,直接采用统一的URL,辅以一套标准的系统参数和业务参数调用服务。TOP这种请求模型优于REST的请求模型,因为TOP的请求模型倾向于把服务看成一个个API,而REST请求模型倾向于把服务看成一个网页,前者偏向于程序调用,而后者偏向于看网页的人,虽然可读性强,但却不方便客户端程序的编写。

从我个人的喜好上来说,如果要给请求模型的好坏排个序,那自然是TOP的请求模型优于REST,而REST请求模型优于SOAP。因此就希望采用TOP的方式重构网站的服务总线,但是TOP的框架并没有开源,所以就自己动手搞了一个基于Spring技术架构,采用TOP请求模型思想的服务平台模型,即Rop。

Rop的英文和Spring的缔造者Rod很像,我很喜欢这种巧合,毕竟,Rop框架的实现和Spring息息相关,Rop基本上是参照Spring MVC的实现原理设计的,使用到了很多Spring的工具类,Rop本身也需要Spring框架才能运行,可以看成是Spring的一个子项目。

与传统Web Service框架相比,Rop有哪些优势? Top

Rop和一般的Web Service框架不处在相同的层面,一般的Web Service框架是站在技术层面的,它们的工作职责是把Java对象开放成一个Web Service服务,或者把Web Service服务映射成一个Java方法。而Rop是服务平台的框架,是面向应用层的,Web Service在Rop中仅是一个基础,在此基础上Rop提供了错误模型、会话管理、版本控制、安全控制、超时限制、文件上传等众多的“应用层”领域问题的解决之道。

性能如何? Top

对于服务平台框架来说,性能是非常关键的因素。Rop内部拥有一个线程池,可以根据硬件情况调整线程池的大于进行性能调优。Rop框架本身直接使用Spring的类包进行请求响应报文流化工作,因此Rop也继承了Spring的高性能。

我本身并没有对Rop进行大面向的性能测试,我使用rop-sample项目的UserServiceRawClient#testServiceXml-RequestAttr测试方法进行了性能的测试,该方法包括了一套比较复杂的业务参数,拥有一定的代表性。采用Rop默认线程池的配置:corePoolSize:200 maxPoolSize:500,在我本机上(双核 2.8G,内存 4G)时取得了以下的测试数据:

请求并发线程 请求数 总执行时间(s)
10   1000  16.74
50   1000  16.00
100   1000  19.38
200   1000  20.27
400   1000  22.55
800   1000  22.85


可见,Rop性能不会随着并发数增加而明显的下降,整体表现比较平稳的。除性能外,服务平台的整体稳定性也是Rop框架重点考虑的,因此我们提供了平台级、服务级、会话级的服务配额限制,以保证服务平台的整体稳定性,具体可以参照开发手册(手册下载)。

Rop的实际应用效果? Top

Rop不是一个玩玩的开源项目,相反它来源于实际的生产型项目。自从我们的网站使用了Rop后,我基本上就从服务平台的设计工作中脱离出来了,因为Rop强大的错误模型已经把设计服务报文的工作量降到了最低,我完全可以把有限的设计工作下放给开发人员。

另一方面,由于Rop为平台领域性问题都提供了解决方案,开发服务平台的工作就降格为写一个个服务方法,由于有Rop在框架层为平台的稳定性进行保驾护航,因此,对于服务平台的开发工作,普通的开发人员都可以胜任了。

目前项目进展情况?开发团队情况? Top

目前Rop已经发布了1.0正式版,且开发手册已经发布,地址:http://dl.iteye.com/topics/download/198d59b6-2a45-35c6-a44c-6c77c1081c8b

Rop的发布包已经提交到Maven核心仓库中,您可以通过如下配置引用Rop:
<dependency>  
<groupId>com.bookegou</groupId>  
<artifactId>rop</artifactId>  
<version>1.0</version>  
</dependency> 

目前项目团队主要就我一人,已经在ITeye上创建的Rop的群组,地址是:http://rop.group.iteye.com,很多ITeye的网友对Rop提出了很好的建议,也贡献了部分源码,他们是:melinkelloKitty風一樣的男子等,很感谢他们的参与和贡献。

Rop采用什么开源协议?如何获取Rop? Top

Rop采用最自由的GPL 2.0开源协议

目前Rop项目托管在Github中,可以通过https://github.com/itstamen/rop下载,也可以通过如下git命令将项目克隆到本地机中:
git clone git://github.com/itstamen/rop.git 

其他开发者如何参与到该项目中? Top

您可以在ITeye中通过短信,将整改意见和新功能的需求发送给我,也可以参与到Rop群组中进行讨论,或通过itstamen@qq.com邮箱(或腾讯微博 @hopeahead)将您的贡献源码发给我,我审核后统一发布到Github中,源码中会保留贡献者的信息。

Rop未来的开发计划? Top

没有具体的开发计划,主要还是希望根据收集到的反馈进行有针对性的整改,如过期限制、会话管理等都根据网友的反馈整改的。

初步的计划有两个:

  • 将oauth整合到Rop中:计划10月底完成;
  • 让服务的入参签名更加灵活,和Spring MVC一样:计划今年年底完成。

  • 大小: 7.2 KB


评论 共 61 条
61 楼 Carterslam 2016-11-29 22:10
按照要求配置后,启动tomcat报空指针异常,ropservlet.init 60行,请问下有谁知道怎么回事儿吗?
60 楼 stamen 2015-12-09 20:42
有啦 一直没有上传上去 我找时间上传更新上去一下哦。
59 楼 蜗居之家 2015-11-10 11:18
stamen 你好 rop这个项目最近没有更新优化吗?期待中。。。。
58 楼 liujun2008116 2013-03-25 08:09
说好的计划呢?

“初步的计划有两个:

将oauth整合到Rop中:计划10月底完成;
让服务的入参签名更加灵活,和Spring MVC一样:计划今年年底完成。”




57 楼 方世玉 2012-11-02 19:36
文档写的不错,以前没有接触过开放API,看过之后就了解了。
56 楼 justsoso8840 2012-10-17 16:26
请求的分布式SESSION如何管理?
55 楼 zhang20084 2012-10-17 11:29
没有dao操作层啊。
54 楼 jiyou1122 2012-10-11 15:56
曾在一家公司做系统架构师时,构建了一个类似于普元的模型驱动快速开发平台,据说很多程序员都有一个开发平台梦,这个梦我算是基本实现了

53 楼 stamen 2012-10-11 13:37
zhang20084 写道
stamen 写道
zhang20084 写道
发现github好久没有更新了。能更新一下吗?我想使用。


最近出游了 哈,会更新的。

感谢回复。预计什么时候更新哈。我好准备下载使用。着急哈。


为什么要等更新再用呢? 呵呵 有需求才更新,有Bug才更新。
52 楼 zhang20084 2012-10-11 13:11
stamen 写道
zhang20084 写道
发现github好久没有更新了。能更新一下吗?我想使用。


最近出游了 哈,会更新的。

感谢回复。预计什么时候更新哈。我好准备下载使用。着急哈。
51 楼 stamen 2012-10-09 15:50
zhang20084 写道
发现github好久没有更新了。能更新一下吗?我想使用。


最近出游了 哈,会更新的。
50 楼 zhang20084 2012-10-04 15:58
发现github好久没有更新了。能更新一下吗?我想使用。
49 楼 二十一 2012-09-10 17:36
问个问题,分布事务是怎么实现的
48 楼 huaxianpeng 2012-09-09 09:57
中国的开源就是要这么搞起来的,支持。
47 楼 wsy07 2012-09-04 10:53
beowulf2005 写道
redhacker 写道
重新写了一个框架而已吧,说成什么平台,解决过之,我们用jersey开发项目一样做的很好。作者似乎对自己的校验模型很满意,其实没有理解rest本身,rest提倡用http标准码来表示服务的错误,比如认证错误401、服务未找到400,方法被禁用405,等等,业务错误可以统一由500表示,再自行定义业务错误码,请求响应错误判断先判断状态码,如果是200等正确的,直接读http entity body获取序列化后的xml或json(jaxb序列化得到的),如果是上述的错误码,非500错误系统直接报出统一的错误,500的错误,这时候http entity body里已经放入了具体的业务错误信息,比如:E001:用户不存在(这些都是通过i18n定义在资源文件里),其中E001就是业务错误码!jersey框架的统一异常处理器,能非常方便的做这样的事情!

如果是企业开发使用富客户端extjs之类的框架,post,put,get,delete被很好的支持,非常方便,做网站开发也可以使用ext-core,这些方法都被包含,甚至你可以用head方法。

rest的好处是充分利用http协议的特点,楼主断章取义的说了几个rest的好处,最后就结论说你的rob更好,其实rest以资源为中心的理念重点的几个特点包括:1、请求返回内容协商、客户端缓存、表意性统一接口、统一响应码(包括错误码)等,请认真读feilding博士的论文。


RESTful WS 相关的几个JSR早点吃透的话,估计楼主就放弃这个项目了。

无语,如果把雄华的国籍改成国外某国。是不是又是另一翻恭维?
46 楼 ybwantao 2012-09-03 16:17
要不是有开源 想要了解这些应该要不少年头吧 支持一下
45 楼 beowulf2005 2012-09-01 02:25
redhacker 写道
重新写了一个框架而已吧,说成什么平台,解决过之,我们用jersey开发项目一样做的很好。作者似乎对自己的校验模型很满意,其实没有理解rest本身,rest提倡用http标准码来表示服务的错误,比如认证错误401、服务未找到400,方法被禁用405,等等,业务错误可以统一由500表示,再自行定义业务错误码,请求响应错误判断先判断状态码,如果是200等正确的,直接读http entity body获取序列化后的xml或json(jaxb序列化得到的),如果是上述的错误码,非500错误系统直接报出统一的错误,500的错误,这时候http entity body里已经放入了具体的业务错误信息,比如:E001:用户不存在(这些都是通过i18n定义在资源文件里),其中E001就是业务错误码!jersey框架的统一异常处理器,能非常方便的做这样的事情!

如果是企业开发使用富客户端extjs之类的框架,post,put,get,delete被很好的支持,非常方便,做网站开发也可以使用ext-core,这些方法都被包含,甚至你可以用head方法。

rest的好处是充分利用http协议的特点,楼主断章取义的说了几个rest的好处,最后就结论说你的rob更好,其实rest以资源为中心的理念重点的几个特点包括:1、请求返回内容协商、客户端缓存、表意性统一接口、统一响应码(包括错误码)等,请认真读feilding博士的论文。


RESTful WS 相关的几个JSR早点吃透的话,估计楼主就放弃这个项目了。
44 楼 stamen 2012-08-31 15:59
magic4u 写道
Rop内部拥有一个线程池,可以根据硬件情况调整线程池的大于进行性能调优
这个能不能详细介绍一下?多谢了。

可以参看一下手册,里面有介绍的。
43 楼 magic4u 2012-08-31 15:49
Rop内部拥有一个线程池,可以根据硬件情况调整线程池的大于进行性能调优
这个能不能详细介绍一下?多谢了。
42 楼 stamen 2012-08-31 15:40
wuzijingaip 写道
中国的程序员解决完温饱还要解决住,然后是老婆,然后是孩子........ 哪有心思搞那些开源项目

是啊 没有一个很好的可持续发展的环境,完全凭兴趣做开源,所以在中图做开源的都是理想主义者。
41 楼 wuzijingaip 2012-08-31 15:39
中国的程序员解决完温饱还要解决住,然后是老婆,然后是孩子........ 哪有心思搞那些开源项目
40 楼 lvjinhua 2012-08-31 15:18
不错不错,下来学习和使用中
39 楼 stamen 2012-08-31 13:05
yyzz1986 写道
楼主,昨天去看啦你们的中图一购网,你们公司的那个易购进销存系统,进销存那块还有小bug, 加强测试和检查啊。我随便用系统操作了下。还有听你们的客服说那个中图通 还必须要安装益华和广智的图书管理软件才能对接啊。本来想安装下的 ,到了数据库配置那就走不下去啦。里面的链接点过去直接报404 ,帮助文档也应该加强下。

谢谢你的提醒,我会加强一下的。中图通和进销存大家都不要下载啊 ,我们是给行业用户用的,不是大众型的 ,呵呵,谢谢配合。
38 楼 yyzz1986 2012-08-31 11:29
楼主,昨天去看啦你们的中图一购网,你们公司的那个易购进销存系统,进销存那块还有小bug, 加强测试和检查啊。我随便用系统操作了下。还有听你们的客服说那个中图通 还必须要安装益华和广智的图书管理软件才能对接啊。本来想安装下的 ,到了数据库配置那就走不下去啦。里面的链接点过去直接报404 ,帮助文档也应该加强下。
37 楼 mjlixm 2012-08-31 08:51
陈前辈,很早就看到你写的代码了,上面有你的名字,你以前在厦门带过吧!
36 楼 jy00105276 2012-08-31 00:28
楼下好多大牛都感觉好不屑啊,批判这个批判那个的。人家问你,就说你自己去思考吧。。无论rop好坏,能开源出来,大家学习参考讨论,也是一件好事。

需要嘲讽?不足之处说不足,的确不好说哪里不好。“你这个和xxx很像,没啥意思”,呵呵。

35 楼 huang_yong 2012-08-30 20:17
曾经看作者博客的时候,留意过这个Rop框架。大家评价褒贬不一,我想说的是,有能力把这件事情做出来,才是硬道理,我们不需要去批判,成功与否需要经历长时间的考验。
我会一直关注作者,也会亲自使用你的框架,希望能够对我们的团队有所帮助。再次感谢作者的贡献,谢谢!
34 楼 stamen 2012-08-30 16:10
8000 写道
看了一下,纯属YY,你在做MVC请求吧,这个不是SOA,就更不是webservices。

还校验,SOA都是后台服务,比较企业core业务服务了,数据校验(那个字段是否为空,那个字段长度不小于多少个?)你没有搞清楚service的概念吧?

无语 ,只能说你对Web Service的理解太狭隘了。
33 楼 stamen 2012-08-30 16:09
landy8530 写道
请问一下,ROP要依赖的jar包有哪些?谢谢!

你可以看Rop项目的pom.xml 依赖是通过Maven的,不需要太关注了。
32 楼 landy8530 2012-08-30 15:49
请问一下,ROP要依赖的jar包有哪些?谢谢!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics