使用中产生的困惑和问题,请指教
EricLiang
2012-06-09
直入正题,最近几天在看rop框架,设计思路很好。有几个问题向stamen和各位请教:
1、现在对请求方式没有要求,post或get都一样,是否有对考虑请求方式限定,例如有的API只能用post请求。 2、有些API的请求参数包含安全信息,是否有考虑支持https方式请求 3、针对每一次请求API时,都要封装一个RopRequest和RopResponse对象,这两个对象能否整合在一起,比如有一场景用来查询手机归属地,很容易写出这样的对象 public class PhoneNumber { private String phoneNumber; //手机号码 private String location;//归属地 private String carrier; //运营商 private String brand; //子品牌,如全球通 private String online;//是否在网 //getter and setter } 这个对象就是对手机号码带有的属性进行封装。请求对象和响应对象如果能够整合,则phoneNumber属性可以作为请求参数,其他属性作为响应参数,不必写出两个对象了。 类似的例子还有:查询商品,请求为商品的条形码属性,响应为商品对象(包含名称、价格、产地...),而条形码也是商品对象的属性之一。 4、校验的问题,这个跟框架关系不是很大。目前框架校验用的是hibernate validator(JSR-303标准),有个问题不知道能否用此框架解决,还是用场景说明: 假如我开放了一个天气预报的API,请求参数是城市名称或区号或城市全拼,请求校验是城市名称、区号、城市全拼三者之一不为空这个的校验规则。是否需要对hibernate validator进行自定义校验。 5、Interceptor的问题 我在运行时,Interceptor好像一直没有起作用。示例中ReservedUserNameInterceptor用来拦截userName=jhonson,但是拦截的日志倒是有输出,只是没有阻止请求,不知大家是不是这样的。在springMVC中Interceptor是用拦截方法的boolean判读的,而Rop框架用的是void. 总体来说框架很不错,特别是请求鉴权,越来越接近springMVC了,用了很多模式,扩展起来很容易的。 |
|
stamen
2012-06-11
首先,非常感谢你这样认真的使用者,你的认真是推动Rop前进的动力。下面,我来回答一下你的问题:
EricLiang 写道 直入正题,最近几天在看rop框架,设计思路很好。有几个问题向stamen和各位请教:
1、现在对请求方式没有要求,post或get都一样,是否有对考虑请求方式限定,例如有的API只能用post请求。 我正在改的版本已经支持了,不过只支持POST及GET,其它的我们不支持了,觉得没有什么必须,PUT,DELETE可以通过method进行区分。 引用 2、有些API的请求参数包含安全信息,是否有考虑支持https方式请求 这个和框架本身应该没有什么关系吧,是传输层的问题,这个我找时间试一下。 引用 3、针对每一次请求API时,都要封装一个RopRequest和RopResponse对象,这两个对象能否整合在一起,比如有一场景用来查询手机归属地,很容易写出这样的对象 public class PhoneNumber { private String phoneNumber; //手机号码 private String location;//归属地 private String carrier; //运营商 private String brand; //子品牌,如全球通 private String online;//是否在网 //getter and setter } 这个对象就是对手机号码带有的属性进行封装。请求对象和响应对象如果能够整合,则phoneNumber属性可以作为请求参数,其他属性作为响应参数,不必写出两个对象了。 类似的例子还有:查询商品,请求为商品的条形码属性,响应为商品对象(包含名称、价格、产地...),而条形码也是商品对象的属性之一。 现在的新版本(正在写单元测试,完了我提交上去),我已经将RopResponse和RopRequest都改为接口了,你完全可以让一个类实现这两个接口。 引用 4、校验的问题,这个跟框架关系不是很大。目前框架校验用的是hibernate validator(JSR-303标准),有个问题不知道能否用此框架解决,还是用场景说明: 假如我开放了一个天气预报的API,请求参数是城市名称或区号或城市全拼,请求校验是城市名称、区号、城市全拼三者之一不为空这个的校验规则。是否需要对hibernate validator进行自定义校验。 这个要看JSR303本身是不是支持,JSR303的限制注解是可以扩展的,不过一个最简单的办法是在服务方法中把这个校验逻辑业务化处理。 引用 我在运行时,Interceptor好像一直没有起作用。示例中ReservedUserNameInterceptor用来拦截userName=jhonson,但是拦截的日志倒是有输出,只是没有阻止请求,不知大家是不是这样的。在springMVC中Interceptor是用拦截方法的boolean判读的,而Rop框架用的是void. 你可以在Interceptor中往RequestContext设置RopResponse阻止往下运行,Rop是通过判断RequestContext是否有RopResponse决定是否往下走的 现在Rop的文档没有写,所以会有这些问题,我会在这两周内把Rop的文档写出来,请关注。 |
|
EricLiang
2012-06-11
感谢回答,原来我的问题你都有考虑
我们95%以上的请求都是get和post就此两种足矣,虽然REST协议支持6种,其实也不必要了(目前看来)。 https协议我不太了解,可能问题有点外行了 Interceptor的问题: 示例中的代码: if("jhonson".equals(methodContext.getParamValue("userName"))){ InterceptorResponse response = new InterceptorResponse(); response.setTestField("the userName can't be jhonson!"); methodContext.setRopResponse(response); } 执行到这里 RequestContext对象(methodContext)的属性RopResponse已经有值了,可 是响应内容却 {"createUserResponse":{"userId":"1","createTime":"20120101010101","foo":{"field1":"1","field2":"2"}}} 说明执行了业务方法,没有拦截成功 |
|
stamen
2012-06-11
EricLiang 写道 感谢回答,原来我的问题你都有考虑
我们95%以上的请求都是get和post就此两种足矣,虽然REST协议支持6种,其实也不必要了(目前看来)。 https协议我不太了解,可能问题有点外行了 Interceptor的问题: 示例中的代码: if("jhonson".equals(methodContext.getParamValue("userName"))){ InterceptorResponse response = new InterceptorResponse(); response.setTestField("the userName can't be jhonson!"); methodContext.setRopResponse(response); } 执行到这里 RequestContext对象(methodContext)的属性RopResponse已经有值了,可 是响应内容却 {"createUserResponse":{"userId":"1","createTime":"20120101010101","foo":{"field1":"1","field2":"2"}}} 说明执行了业务方法,没有拦截成功 好的 我明天检查一下。 |