http://www.iteye.com/topic/1121252
简介
最近在开发自己公司网站的开放API服务,较深入地研究了 TOP(Taobao Open Platform:淘宝开放平台 http://api.taobao.com )。在接触过这么多的网站Api中,发现TOP真的是做得非常不错,结构清晰明了,使用简单轻便。但是TOP没有开源,搞不到TOP的源码。所以只能“自己动手,丰衣足食”了。
我基于Spring MVC 3.0进行开发,居然3天就完工了,现在已经在公司中使用,大家的反映相当不错,现已整理了一份PPT文档,奉献给大家。同时,我将其命名为ROP(Rest Open Platform),已经在github中发布,地址是:
https://github.com/itstamen/rop
iteye的Rop群组已经改变很大,最新消息请加入群中了解:http://rop.group.iteye.com/
欢迎大家讨论!
ROP的快速开发完成,其实是借力于Spring MVC灵活的扩展性和其提供了各种好用且强大的工具类,ROP基于Spring MVC,在处理流程上进行了重新的组织,但是在实现上基本上直接利用Spring提供的工具类和组件,所以实现并不太难。
5分钟快速入门 以下是基于ROP开发Web Service的简单例子:
例子说明: 根据userName/password/salary这三个属性创建一个新用户。
第1步:创建请求对象
- package com.sample.rop.request;
- import com.stamen.rop.RopRequest;
- import org.springframework.format.annotation.NumberFormat;
- import javax.validation.constraints.DecimalMax;
- import javax.validation.constraints.DecimalMin;
- import javax.validation.constraints.Pattern;
- public class createuserRequest extends RopRequest {
- @Pattern(regexp = "\\w{4,30}")//① 通过JSR303注解指定验证规则
- private String userName;
- @Pattern(regexp = "\\w{6,0)">//②
- private String password;
- @DecimalMin("1000.00")
- @DecimalMax("100000.00")
- @NumberFormat(pattern = "#,###.##")//③
- private long salary;
- //getter and setter...
- }
①、②及③处通过JSR303注解指定请求参数的合法性规则,如果请求参数值违反了规则,ROP会产生相应的错误报文。
第2步:创建响应对象 package com.sample.rop;
第3步:创建服务方法 import com.rop.ApiMethod;
@ApiMethod(" sample.user.add ")表示,addUser(...)将处理?method= &...的服务请求。
处理方法的签名规约如下:
- 入参必须继承于RopRequest父类,也可以为空(无入参);
- 返回值必须实现RopResponse接口,由于一般的服务方法都拥有错误的可能,因此一般直接使用RopResponse作为返回类型,这样不管是正确的响应对象,还是错误的响应对象,都可以满足签名的要求。
这样,所有服务端的开发工作就完成了!下面来写客户端调用的代码。
编写调用的客户端 由于现在ROP还没有提供客户端调用包,所以我们直接使用Spring的RestTemplate来写:
import com.rop.validation.DefaultRopValidator;
No | parmName | paramType | required | desc |
1. | method | String | Y | API method name(sample.user.add) |
2. | appKey | Y | design to application's appKey,you can define in rop.appSecret.properties which is in classpath. | |
3. | v | String | Y | API version,Now only support:1.0。 |
4. | sign | String | Y | API parameters's sing,Use SHA1 encryption algorithm |
5. | sessionId | String | N | use's sessionId.you can provide a rest api so client can get it and maintain locally. |
6. | format | String | Optional,designated response format. The default XML,currently support for an XML format,json | |
7. | locale | String | N | locale,such lick cn_ZH,en... |
参见: http://open.taobao.com/doc/detail.htm?id=111 启用服务端的服务后,执行该测试,将返回:
- <?xml version="1.0" encoding="utf-8" standalone="yes"?>
如果将format参数设置为json,则其返回的报文为:
- {"sampleRopResponse1":{"userId":"1","createTime":"20120101010101"}}