论坛首页 Java企业应用论坛

自己动手写淘宝开放平台:Rop(将WebService REST进行到底!!)

浏览 100451 次
该帖已经被评为精华帖
作者 正文
   发表时间:2012-03-22  
   这两天仔细学习了Maven,现在已经将ROP转换为maven的格式了,而且将rop脱离Spring MVC,单独可用,此外
ROP更加模式化,可以通过RopServlet的配置指定URI,会话管理、appKey的密钥管理皆可定制。简要变更日志如下:
1.ROP已经改为maven的项目组织方式;
2.ROP不依赖Spring MVC,是一个JAR包就可以了;
3.rop-sample演示了如何使用ROP包;
0 请登录后投票
   发表时间:2012-03-28  
stamen 写道
   这两天仔细学习了Maven,现在已经将ROP转换为maven的格式了,而且将rop脱离Spring MVC,单独可用,此外
ROP更加模式化,可以通过RopServlet的配置指定URI,会话管理、appKey的密钥管理皆可定制。简要变更日志如下:
1.ROP已经改为maven的项目组织方式;
2.ROP不依赖Spring MVC,是一个JAR包就可以了;
3.rop-sample演示了如何使用ROP包;


一直很关注这个项目,希望早日完善接口版本等功能。
0 请登录后投票
   发表时间:2012-03-28  
cdwm 写道
stamen 写道
   这两天仔细学习了Maven,现在已经将ROP转换为maven的格式了,而且将rop脱离Spring MVC,单独可用,此外
ROP更加模式化,可以通过RopServlet的配置指定URI,会话管理、appKey的密钥管理皆可定制。简要变更日志如下:
1.ROP已经改为maven的项目组织方式;
2.ROP不依赖Spring MVC,是一个JAR包就可以了;
3.rop-sample演示了如何使用ROP包;


一直很关注这个项目,希望早日完善接口版本等功能。



   实不相瞒,由于GIT我还在啃中,目前没有发布开发者名单,我会尽快的!
0 请登录后投票
   发表时间:2012-04-01  
用Maven撒 霍霍
0 请登录后投票
   发表时间:2012-04-03  
不错! 公司也考虑 像TOP api 开放的方式
0 请登录后投票
   发表时间:2012-04-05  
不错不错!又啃了下 霍霍
0 请登录后投票
   发表时间:2012-04-10  
git下载了,周末摸了一下,相当强大啊!
0 请登录后投票
   发表时间:2012-04-18  
基于rest风格的 权限控制需要自己去实现。
0 请登录后投票
   发表时间:2012-04-26   最后修改:2012-04-27
Rop项目有更新了啦-->
1.移除对Spring MVC的依赖
   在web.xml中通过一个RopServlet启动Rop,可指定Rop的Rest服务地址,不再是原来固定的 http://localhost/<context>/router

2.添加了很多可定制的组件
  SessionChecker(会话检查组件)、AppSecretManager(应用密钥管理组件)、SecurityManager(服务安全检查组件)均可配置,既可通过Spring注入,也可以通过RopServlet的init-param参数指定,具体将参考RopServlet的Javadoc。
引用
   Rop会自己扫描Spring容器并加载之{@link SessionChecker}、{@link AppSecretManager}。也可以通过
"sessionCheckerClassName"、"appSecretManagerClassName"的Servlet参数指定实现类的类名。如果显式指定了Servlet 参数,则Rop就不会扫描Spring容器中的Bean了。
       如果既没有使用Servlet参数指定,也没有在Spring容器中配置,则Rop使用{@link DefaultSessionChecker}和{@link FileBaseAppSecretManager}
  作为{@link SessionChecker}和{@link AppSecretManager}的实现类。


3. Rop新增拦截器的支持
    Rop会自己扫描Spring容器并加载之{@link Interceptor}的Bean 。也可以通过"interceptorClassNames"的Servlet参数指定实现类的类名。如果显式指定了Servlet 参数,则Rop就不会扫描Spring容器中的Bean了。
   如果在拦截器中往RopContext中设置一个RopResponse,则会阻止请求链的继续,直接驳回请求,返回响应。
   可以使用Rop的拦截器完成日志记录,服务时间审计,安全检查等工作。

4.将Rop通用的错误和应用自定义错误的国际化资源文件分开
  一般通过的错误信息在i18n/rop/error的资源中定义,这个是Rop自带的。
  应用自定义的错误信息可以通过RopServlet的"errorResourceBaseName"参数指定错误资源文件的基名。如果不指定,默认为“i18n/rop/ropError”。

5.RopRequest支持JXAB
  原来只考虑到RopResponse支持JXAB(JSR222) 进行XML/JSON的流化,而请求参数只支持属性绑定,现在RopRequest的属性也支持JXAB和JSR303.
  如下所示:
 
 public class CreateUserRequest extends RopRequest {

    @Pattern(regexp = "\\w{4,30}")
    private String userName;

    @Pattern(regexp = "\\w{6,30}")
    private String password;

    @DecimalMin("1000.00")
    @DecimalMax("100000.00")
    @NumberFormat(pattern = "#,###.##")
    private long salary;

    @Valid
    private Address address;
}


@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "address")
public class Address {

    @XmlAttribute
    @Pattern(regexp = "\\w{4,30}")
    private String zoneCode;

    @XmlAttribute
    private String doorCode;


    @XmlElementWrapper(name="streets")
    @XmlElement(name="street")
    private List<Street> streets;
}

   如下的请求:
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
        form.add("method", "user.add");//<--指定方法名称
        form.add("appKey", "00001");
        form.add("v", "1.0");

        form.add("sessionId", "test");
        form.add("msgFormat", "json");
        form.add("locale", "en");


        form.add("userName", "jhonson1");
        form.add("password", "123456");
        form.add("salary", "2,500.00");

        //①<--这儿
        form.add("address",
                       "<address zoneCode=\"0001\" doorCode=\"002\">\n" +
                        "  <streets>\n" +
                        "    <street no=\"001\" name=\"street1\"/>\n" +
                        "    <street no=\"002\" name=\"street2\"/>\n" +
                        "  </streets>\n" +
                        "</address>");


        String sign = DefaultRopValidator.sign(new ArrayList<String>(
                form.keySet()), form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");

        form.add("sign", sign);

        String response = restTemplate.postForObject(
                "http://localhost:8088/router", form, String.class);
        System.out.println("response:\n" + response);
    }


   address请求参数是一个XML,它会自动绑定到CreateUserRequest的address属性对象中!


所有代码已经同步到github中:https://github.com/itstamen/rop

另注:Rop的开源用户我还没有开放,我将尽快开放,谢谢
-----------------------

Rop致力于打造最简单的Rest Web Service框架!!
0 请登录后投票
   发表时间:2012-04-26  
有了这个 ROP , 我可不想再用 WebService 来做 API 了;

不过最好也能移除对 Spring 的依赖, 通用性就更大了;

这是一把两面刀啊!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics