用CXF开发RESTful风格WebService
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用CXF开发RESTful风格WebService
目录
1RESTful简要介绍 (1)
2开发一个普通的接口 (1)
2.1定义DTO (1)
2.2定义接口 (2)
2.3实现类 (2)
3开发RESTful风格WebService服务端 (2)
3.1定义资源(定义DTO) (2)
3.2开发接口 (3)
3.3实现类 (4)
3.4配置CXF(整合Spring) (4)
3.4.1接口的Spring配置文件 (4)
3.4.2CXF的Spring配置文件 (4)
3.4.3修改web.xml (5)
4开发RESTful风格WebService客户端(Java) (5)
4.1定义客户端接口 (5)
4.2定义实现类 (6)
1RESTful简要介绍
RESTful风格的WebService之所以当下如此流行,是由于其相对于SOAP风格的WebService 更简洁、更轻量级,REST风格的WebService传输的是JSON或极其简洁的XML,因而其效率和性能都比较理想。
RESTful风格的WebService主张重用HTTP协议,面向资源编程(ROA)。扼要的说,RESTful 风格WebService中,每一个URL即表示一个资源,比如/employees/1表示id为1的员工。
1.如果对此URL调用HTTP GET方法,则返回员工的XML形式;
2.如果对此URL调用HTTP POST/PUT方法,则可以新增或者修改此员工;
3.如果对此URL调用HTTP DELETE方法,则可以删除此员工;
因此,我们在设计一个RESTful风格的接口时,一定要拥有面向资源设计的考量!
此外,在实现接口的过程中,要遵循RESTful风格的几个特性,他们分别是:
1.无状态性:HTTP本身即是无状态协议,因此RESTful天然的具备无状态性,具备优良的
水平扩展能力!
2.幂等性:GET/PUT/DELETE方法具备此特性,幂等性可概述为无论重复调用多少次,其
结果都一致!POST例外,不过设计的时候也可以按照此特性设计!
3.唯一性:即URL地址要唯一的表示一个资源!
关于事务、安全等更多的高级特性这里不阐述,有兴趣的可参考《Restful Web Service中文版》一书。
下面以开发一个普通接口和开发REST风格WebService接口为对比,指导大家快速入门。
2开发一个普通的接口
2.1定义DTO
2.2定义接口
2.3实现类
接口的实现,就此省略。
3开发RESTful风格WebService服务端3.1定义资源(定义DTO)
之间的互相转换。不熟悉JAXB规范的可以自行搜索相关资料。
此Info对象对应的XML格式如下:
3.2开发接口
表示响应/.../infos的GET请求,返回Info列表。
表示响应
对应的Info
表示响应
格式,最终保存Info对象。
表示响应
删除对应的Info
3.3实现类
接口的实现,同上。
3.4配置CXF(整合Spring)
3.4.1接口的Spring配置文件
定义接口的实现类
3.4.2CXF的Spring配置文件
强烈建议加前缀!以此来提供不同版本的WebService访问!
3.4.3修改web.xml
到此,配置完毕,可以启动部署到web容器中启动,在FireFox中访问http://localhost:8080/v1/infos,看看是否有XML格式的输出。
4开发RESTful风格WebService客户端(Java)
4.1定义客户端接口
4.2定义实现类
客户端如果能引用服务端的jar包,那么开发将非常简单。
客户端的开发十分简便,如果用其他语言,那么需要自行使用对应的HTTP类库进行编码。5范例
本文对应的例子为maven构建:
cod-sample-ret为服务端,运行jetty:run即可
rest-client为客户端,运行src/test/java/com/csair/cod/restclient/RestClientTest.java单元测试类即可