《Java RESTful Web Service实战》
【下面的文字全部转自某论坛,不代表个人观点】RESTful Web服务的书一直很少,记得O'Reilly出过一本,还有Packt出过两本CXF和Axis2的入门书,都没翻译到国内。想看看这本书,
————————————————————————
1.REST究竟是什么?是一种新的技术、一种新的架构、还是一种新的规范?
REST即表述性状态转移,英文全称Representational State Transfer,是Roy Fielding博士在2000年他的博士论文中提出的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸 缩性。
REST是一种架构风格,它既不是新技术,也不是新的规范。REST利用了HTTP协议提供的几个方法来实现了网络资源的增删改查。
2.REST与传统的Web Service究竟有没有本质的区别?如果Web Service已经足够好了,为什么还会有REST?作为世界上最成功的分布式应用架构风格,它是为运行在互联网环境的分布式超媒体系统量身定制的,它究竟有哪些优势?
传统的Web Service指的是SOAP Web服务,两者的区别极大。
SOAP即Simple Object Access Protocol,它是一个协议规范,基于XML格式,而REST只是一种架构风格,采用XML或JSON等交换格式都可以。
REST简单、清晰,而SOAP则比较复杂,而且SOAP协议有很多标准的扩展协议规范,比如WS-Security、WS-Routing、WS-Referral等等。
REST很好理解,且极易上手;不过由于它缺乏标准,因此只被看作是一种架构方法。而SOAP是一个工业标准,它具备良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。
企业级应用通常会考虑SOAP,而互联网应用则通常考虑用REST。
3.从架构风格的抽象高度来看,常见的分布式应用架构风格有三种:1.分布式对象(Distributed Objects,简称DO)、2.远程过程调用(Remote Procedure Call,简称RPC)、3.表述性状态转移(Representational State Transfer,简称REST);这三种风格有哪些实例?请举例说明。
分布式对象(Distributed Objects,简称DO)是早期做分布式系统采取的技术,它的实例有:微软的COM/DCOM技术,CORBA技术等。
远程过程调用(Remote Procedure Call,简称RPC),也是早期做分布式系统采取的技术,它是基于C/S模型调用的机制,客户机向服务器端发送调用请求等待服务器应答,是一种典型的请 求应答机制,大致过程可以理解为本地分布式对象向本机发请求,不用自己编写底层通信本机会通过网络向服务器发送请求,服务器对象接受参数后,经过处理再把 处理后的结果发送回客户端。它的实例有Sun公司的Java RMI(Remote Method Invocation)技术、EJB技术等。
表述性状态转移(Representational State Transfer,简称REST),利用HTTP协议,是目前最适合的技术。
4.在互联网中REST占据了统治地位,但在企业内网中却面临着DO和RPC的挑战,为什么?分布式对象DO与REST有哪些差别?RPC与REST有哪些不同?
1)这很正常,REST架构风格在互联网应用中得到广泛验证,但对于企业内网而言,技术还比较新。
2)现有的企业应用要改造成REST,代价太大。
3)DO和RPC太成熟了,旧的习惯主导一切。
分布式对象DO与REST的区别在于分布式对象采用专有协议,REST采用HTTP协议;分布式对象不是跨平台的,REST是跨平台的。
RPC与REST的区别:RPC以动作为中心,而REST以资源为中心;RPC是C/S架构,而REST既可以是B/S架构,也可以是C/S架构。
5.在Java 世界中,与大Web Service 相对应的规范是JAX-WS。新的规范是Java RESTful Web Service 简称JAX-RS,JAX-RS能否取代JAX-WS?
JAX-RS不太可能取代JAX-WS,至少短时间内不可能。原因很多,主要阐述两点,一是JAX-WS有自己适用的场景;二是技术是为业务服务的,用JAX-WS能搞定的事,不一定就一定要使用JAX-RS。
6.您是否使用过使用Java开发REST式的Web服务经历?请分享下个人经验。
我经常用Java开发REST服务。这几年很多项目都用到了REST服务,尤其是移动互联网应用,通过REST服务暴露接口,供Android终端、iOS终端调用。
用Java开发REST服务,我用的最多的是Jersey,Apache CXF框架也用过,但它显得笨重,用Jersey更加轻量级、高效。
JBoss提供的RESTeasy框架也不错,跟Jersey差不多。
至于REST测试,可以用浏览器,或者编写使用curl命令的脚本,或者用soapui工具等,还可以用Chrome浏览器的REST Client插件等等。