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步:创建请求对象
-
packagecom.sample.rop.request;
-
importcom.stamen.rop.RopRequest;
-
importorg.springframework.format.annotation.NumberFormat;
-
importjavax.validation.constraints.DecimalMax;
-
importjavax.validation.constraints.DecimalMin;
-
importjavax.validation.constraints.Pattern;
-
-
publicclassCreateUserRequestextendsRopRequest{
-
-
@Pattern(regexp="\\w{4,30}")
-
privateStringuserName;
-
-
@Pattern(regexp="\\w{6,30}")
-
privateStringpassword;
-
-
@DecimalMin("1000.00")
-
@DecimalMax("100000.00")
-
@NumberFormat(pattern="#,###.##")
-
privatelongsalary;
-
-
-
}
①、②及③处通过JSR303注解指定请求参数的合法性规则,如果请求参数值违反了规则,ROP会产生相应的错误报文。第2步:创建响应对象
-
packagecom.sample.rop;
-
importcom.rop.RopResponse;
-
importjavax.xml.bind.annotation.XmlAccessType;
-
importjavax.xml.bind.annotation.XmlAccessorType;
-
importjavax.xml.bind.annotation.XmlAttribute;
-
importjavax.xml.bind.annotation.XmlRootElement;
-
@XmlAccessorType(XmlAccessType.FIELD)
-
@XmlRootElement(name="sampleRopResponse1")
-
publicclassCreateUserResponseimplementsRopResponse{
-
@XmlAttribute
-
privateStringuserId;
-
@XmlAttribute
-
privateStringcreateTime;
-
-
}
①、②及③处通过JAXB(即JSR222 已经包含在JDK6中)的注解对响应对象的流化规则进行设置,ROP会自动将响应的对象流化成相应的响应报文,支持XML和JSON格式,仅需通过format的参数进行指定返回格式即可。第3步:创建服务方法
-
packagecom.sample.rop;
-
-
importcom.rop.ApiMethod;
-
importcom.sample.rop.request.CreateUserRequest;
-
importcom.sample.rop.response.CreateUserResponse;
-
importorg.springframework.stereotype.Service;
-
-
@Service
-
publicclassUserRestService{
-
-
@ApiMethod("sample.user.add")
-
publicRopResponseaddUser(CreateUserRequestrequest){
-
CreateUserResponseresponse=newCreateUserResponse();
-
-
response.setCreateTime("20120101010101");
-
response.setUserId("1");
-
returnresponse;
-
}
-
}
首先,服务方法所在的类必须标注成Bean,如①所示,然后在服务方法中标注ROP的@ApiMethod注解,如②所示,这里的@ApiMethod("sample.user.add")表示,addUser(...)将处理?method=sample.user.add&...的服务请求。处理方法的签名规约如下:
- 入参必须继承于RopRequest父类,也可以为空(无入参);
- 返回值必须实现RopResponse接口,由于一般的服务方法都拥有错误的可能,因此一般直接使用RopResponse作为返回类型,这样不管是正确的响应对象,还是错误的响应对象,都可以满足签名的要求。
这样,所有服务端的开发工作就完成了!下面来写客户端调用的代码。编写调用的客户端 由于现在ROP还没有提供客户端调用包,所以我们直接使用Spring的RestTemplate来写:
-
packagecom.sample.rop;
-
-
importcom.rop.validation.DefaultRopValidator;
-
importorg.springframework.util.LinkedMultiValueMap;
-
importorg.springframework.util.MultiValueMap;
-
importorg.springframework.web.client.RestTemplate;
-
importjava.util.ArrayList;
-
-
publicclassUserRestServiceClient{
-
-
publicstaticvoidmain(String[]args){
-
RestTemplaterestTemplate=newRestTemplate();
-
MultiValueMap<String,String>form=newLinkedMultiValueMap<String,String>();
-
form.add("method","sample.user.add");
-
form.add("appKey","00001");
-
-
-
form.add("v","1.0");
-
-
form.add("sessionId","test");
-
form.add("format","xml");
-
form.add("locale","en");
-
-
form.add("userName","tomson");
-
form.add("password","123456");
-
form.add("salary","2,500.00");
-
-
-
Stringsign=DefaultRopValidator.sign(newArrayList<String>(
-
form.keySet()),form.toSingleValueMap(),
-
"abcdeabcdeabcdeabcdeabcde");
-
-
form.add("sign",sign);
-
-
-
Stringresponse=restTemplate.postForObject(
-
"http://localhost:9080/router",form,String.class);
-
System.out.println("response:\n"+response);
-
}
-
}
这里的系统级参数,我们直接模仿TOP设计,说明如下:
No |
parmName |
paramType |
required |
desc |
1. |
method |
String |
Y |
API method name(sample.user.add) |
2. |
appKey |
String |
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 |
N |
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 启用服务端的服务后,执行该测试,将返回:
-
<?xmlversion="1.0"encoding="utf-8"standalone="yes"?>
-
<sampleRopResponse1createTime="20120101010101"userId="1"/>
如果将format参数设置为json,则其返回的报文为:
-
{"sampleRopResponse1":{"userId":"1","createTime":"20120101010101"}}
如果将salary参数改为"aaa",则将返回错误报文(假设format为xml):
-
<?xmlversion="1.0"encoding="utf-8"standalone="yes"?>
-
<errorsolution="InvalidArguments"message="InvalidArguments"code="34">
-
<subErrors>
-
<subError>
-
<code>isv.parameters-mismatch:salary-and-aaa</code>
-
<message>incomingparametersalaryandaaadoesnotmatch,both
-
-
haveacertaincorrespondencebetween</message>
-
</subError>
-
</subErrors>
-
</error>
分享到:
相关推荐
**ROP**(Rapid Open Platform)是一个受到淘宝开放平台(TOP:Taobao Open Platform)启发而设计的全功能REST Web Service开源框架。相较于传统的纯技术型Web Service框架(例如CXF或Axis),ROP具有更为丰富的特性...
1. **通讯报文协议**:REST服务通常需要支持多种数据交换格式,如XML和JSON。这两种格式的选择与应用场景密切相关,JSON因其轻量级和易读性而被广泛采用。 2. **异常描述体系**:REST服务的交互完全依赖于报文,...
Rop,即Rapid Open Platform,是一个参考淘宝开放平台(TOP Taobao Open Platform)的平台设计思路,充分借鉴Spring MVC的技术架构原理开发的一个快速服务开放平台开源框架项目,可以让您迅速构建成熟的SOA服务平台。...
标题中的“rop开放平台”可能是指一个用于研究、学习或测试ROP技术的在线平台,为用户提供了一个环境来实践ROP攻击和防御策略。这样的平台可能包括各种工具、教程、示例代码和讨论论坛,帮助安全研究人员和开发人员...
淘宝开放平台(Taobao Open Platform,简称TOP)是基于ROP理念构建的典型示例之一。作为一个成熟且高度开放的API平台,TOP提供了丰富的业务接口,支持各种场景下的应用开发。 - **统一URL**:所有的API请求都通过...
与传统的 WebService 框架(例如 CXF 和 Jersey)不同,Rop 不仅提供了 WebService 的核心功能,还针对服务开放平台中的应用层问题提供了多种解决方案。 **特点**: 1. **易于上手**:Rop 的设计使得开发者能够...
ret2text攻擊方法是通過覆蓋函數返回地址,控制程式的執行流程,執行惡意代碼,並將惡意代碼寫入到文本區域中。 Return Oriented Programming Return Oriented Programming(ROP)是一種高級的攻擊技術,通過在程...
9月25日,SyScan360 2013国际前瞻信息安全会议在北京国家会议中心举行。安全专家Nguyen Anh Quynh同与会者共同探讨《OptiROP:ROP gadgets搜寻神器》这一议题,并现场传授使用OptiROP的方法。
Rop的设计灵感来源于大型网站服务开放平台的成功实践,为开发者提供了一套成熟的解决方案,使得他们能够快速构建类似淘宝服务开放平台的高效服务平台。 #### 二、Rop功能架构剖析 Rop的功能架构不仅包含核心的...
ROP Emporium是一个在线平台,提供了一系列的挑战,旨在帮助安全研究人员和逆向工程师学习和实践ROP技术。 **什么是ROP(Return-Oriented Programming)?** ROP允许攻击者通过拼接一系列预先存在的、短小的指令...
ROP 是一种计算协议,旨在发现所有读数的来源,这些读数源自复杂的 RNA 分子、重组抗体和微生物群落。 ROP 占 poly(A) 和核糖耗竭协议所有读数的 98.8%,而传统的基于参考的协议为 83.8%。 ROP 分析重复、circRNA、...
`rop-plus`是一个针对Java平台的ROP框架的增强版本,它为开发者提供了更强大的工具和功能,以进行ROP攻击的研究和防御。框架的主要特点可能包括: 1. **gadget库**:`rop-plus`可能包含了一个庞大的Java gadget库,...
本文档旨在提供一个学习和研究ROP的平台,通过实际操作理解ROP的工作原理和实施方法。如果你在学习过程中发现任何错误或有疑问,可以通过留言的方式提出,共同探讨和改进。 **相关知识点:** 1. **返回导向编程...
Exrop是自动ROP链生成器工具,可以根据给定的二进制文件和约束条件自动构建小工具链 要求: , 目前仅支持x86-64! 特征: 处理单向小工具(jmp reg,call reg) 设置寄存器( rdi=0xxxxxx, rsi=0xxxxxx ) 将...
6. **模型绑定与验证**:框架内置了模型绑定和验证机制,自动将请求参数映射到对象,同时进行数据验证,确保数据的正确性。 7. **错误处理与日志**:提供了统一的错误处理机制和详细的日志记录,便于调试和问题追踪...
3. **利用Netty进行数据传输**:通过Netty的编码和解码功能,将ROP链作为数据包发送到服务器或接收来自服务器。 4. **触发漏洞**:在适当的时间点,触发漏洞,使得控制流转向预设的ROP链。 5. **执行自定义逻辑**:...
ROP编程,全称Return-Oriented Programming,是一种高级的计算机安全攻击技术。...作者还提醒,使用ROP技术进行任何形式的实际攻击行为都是非法和不道德的,这篇文章只应该用于学术研究和提高安全意识。
植物小G蛋白ROP的研究进展涉及了植物细胞信号传导系统中的关键调节因子ROP(Rho of Plants)蛋白,它们属于Rho家族的小鸟嘌呤核苷酸结合蛋白,对植物生长、形态建成、细胞极性建立以及激素反应等众多生理过程有着...
RopRop 开发类似于淘宝 开发类似于淘宝 开发类似于淘宝 开发类似于淘宝 服务开放平台 服务开放平台 服务开放平台 这样的服务平台 这样的服务平台 这样的服务平台 这样的服务平台 。RopRopRop充分借鉴了当前大型网站...