该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间: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包; |
|
返回顶楼 | |
发表时间: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包; 一直很关注这个项目,希望早日完善接口版本等功能。 |
|
返回顶楼 | |
发表时间: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我还在啃中,目前没有发布开发者名单,我会尽快的! |
|
返回顶楼 | |
发表时间:2012-04-01
用Maven撒 霍霍
|
|
返回顶楼 | |
发表时间:2012-04-03
不错! 公司也考虑 像TOP api 开放的方式
|
|
返回顶楼 | |
发表时间:2012-04-05
不错不错!又啃了下 霍霍
|
|
返回顶楼 | |
发表时间:2012-04-10
git下载了,周末摸了一下,相当强大啊!
|
|
返回顶楼 | |
发表时间:2012-04-18
基于rest风格的 权限控制需要自己去实现。
|
|
返回顶楼 | |
发表时间: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框架!! |
|
返回顶楼 | |
发表时间:2012-04-26
有了这个 ROP , 我可不想再用 WebService 来做 API 了;
不过最好也能移除对 Spring 的依赖, 通用性就更大了; 这是一把两面刀啊! |
|
返回顶楼 | |