[Restlet] 一点小问题

gdsean 2009-09-04
URI是rest的核心,一个应用,举例要调用一个数据列表,需要传递几个参数,例如orderby,start,length几个查询条件,把他们凑合到链接里面就有点怪怪的。
比如
http://test.com/users/{orderby}/{start}/{length}
实现是可以实现,就是不太像获取资源了,感觉还是在传递查询参数。
gdsean 2009-09-04
用一个办法解决,URI还是用http://test.com/users
只是后面带参数
http://test.com/users?orderby=&start=&length=
通过Resource里面取得query的参数
Form query = getRequest().getResourceRef().getQueryAsForm();
当然除了这个列表之外,
http://test.com/users依然可以处理增加user和删除user,修改user的操作。
不过这个操作好像很山寨。。。
ajax 2009-09-07
gdsean 写道
URI是rest的核心,一个应用,举例要调用一个数据列表,需要传递几个参数,例如orderby,start,length几个查询条件,把他们凑合到链接里面就有点怪怪的。
比如
http://test.com/users/{orderby}/{start}/{length}
实现是可以实现,就是不太像获取资源了,感觉还是在传递查询参数。


这个设计就明显有问题了,这明显是违反了资源设计的。
ajax 2009-09-07
gdsean 写道
用一个办法解决,URI还是用http://test.com/users
只是后面带参数
http://test.com/users?orderby=&start=&length=
通过Resource里面取得query的参数
Form query = getRequest().getResourceRef().getQueryAsForm();
当然除了这个列表之外,
http://test.com/users依然可以处理增加user和删除user,修改user的操作。
不过这个操作好像很山寨。。。


这个方式查询是正确的,但是我个人感觉,如果查询参数很多的时候,这种方式不但感觉不好,而且会造成url很长,这在有的浏览器里面是有问题的。

我能想到的方式有两种:

1. 如果是内部请求URL,我可以把查询参数放到request的attribute,注意,这个request不是servlet里的request,而是Restlet本身的类。
2. 如果是基于Web service,那么把查询参数放到Wadl里,也是一个不错的选择。

BTW:http://test.com/users这个URL仅可以处理增加一个用户,以及列出所有的用户或者满足条件的所有用户,对于删除和修改,url应该是users/{userId}.
gdsean 2009-09-08
ajax说得很好,我也打算用参数来解决,我还有个疑问,rest不维护状态,把状态交给客户端来维护,如果我用js写客户端,岂不很容易暴露敏感资源?
比如需要登录才能操作的一些个人资料。
symark 2009-09-09
gdsean 写道
ajax说得很好,我也打算用参数来解决,我还有个疑问,rest不维护状态,把状态交给客户端来维护,如果我用js写客户端,岂不很容易暴露敏感资源?
比如需要登录才能操作的一些个人资料。


用域就可以实现保护资源吧!~? (新手,如果说的不对,请大家海涵)
ajax 2009-09-10
gdsean 写道
ajax说得很好,我也打算用参数来解决,我还有个疑问,rest不维护状态,把状态交给客户端来维护,如果我用js写客户端,岂不很容易暴露敏感资源?
比如需要登录才能操作的一些个人资料。



Rest确实有无状态性一说,但是我不太明白你是什么意思?
gdsean 2009-09-10
ajax 写道
gdsean 写道
ajax说得很好,我也打算用参数来解决,我还有个疑问,rest不维护状态,把状态交给客户端来维护,如果我用js写客户端,岂不很容易暴露敏感资源?
比如需要登录才能操作的一些个人资料。



Rest确实有无状态性一说,但是我不太明白你是什么意思?


比如说,我要做查阅个人的短消息,这些是只有登录用户才可以看自己的信息,如果服务器不做session检查,我知道了rest的地址,岂不可以查看别人的信息了?
ajax 2009-09-10
gdsean 写道
ajax 写道
gdsean 写道
ajax说得很好,我也打算用参数来解决,我还有个疑问,rest不维护状态,把状态交给客户端来维护,如果我用js写客户端,岂不很容易暴露敏感资源?
比如需要登录才能操作的一些个人资料。



Rest确实有无状态性一说,但是我不太明白你是什么意思?


比如说,我要做查阅个人的短消息,这些是只有登录用户才可以看自己的信息,如果服务器不做session检查,我知道了rest的地址,岂不可以查看别人的信息了?


关于你提到这个例子,如果一定要解决的话,可以这样,

1.对于session里面放登陆信息的话,可以使用restlet去取的servlet关联,实际最后调用的还是servlet的session来保存参数。
2. 对于你说的rest地址不安全的,restlet本身支持各种安全机制,比如基础认证、digester认证,ssl等等。不会让你随便访问一个比较敏感的url的。

但是我想说的是,上面这些都不应该是你要解决这种问题的重点。

restlet本身是一个支持分布式的framework,或者说是实现restful web service的一个framework。通俗一点将,如果我们使用restlet应该构建在有“web service”上,象你上面提到的session保存登陆信息的,本身就是传统web的作用,而ROA里面强调了资源的无状态性。这与session的理念是冲突的。

所以,不要硬把他们扯到一起,如果硬要这样,那我可以说,你应该检讨你的架构了。
symark 2009-09-10
ajax 写道
gdsean 写道
ajax 写道
gdsean 写道
ajax说得很好,我也打算用参数来解决,我还有个疑问,rest不维护状态,把状态交给客户端来维护,如果我用js写客户端,岂不很容易暴露敏感资源?
比如需要登录才能操作的一些个人资料。



Rest确实有无状态性一说,但是我不太明白你是什么意思?


比如说,我要做查阅个人的短消息,这些是只有登录用户才可以看自己的信息,如果服务器不做session检查,我知道了rest的地址,岂不可以查看别人的信息了?


关于你提到这个例子,如果一定要解决的话,可以这样,

1.对于session里面放登陆信息的话,可以使用restlet去取的servlet关联,实际最后调用的还是servlet的session来保存参数。
2. 对于你说的rest地址不安全的,restlet本身支持各种安全机制,比如基础认证、digester认证,ssl等等。不会让你随便访问一个比较敏感的url的。

但是我想说的是,上面这些都不应该是你要解决这种问题的重点。

restlet本身是一个支持分布式的framework,或者说是实现restful web service的一个framework。通俗一点将,如果我们使用restlet应该构建在有“web service”上,象你上面提到的session保存登陆信息的,本身就是传统web的作用,而ROA里面强调了资源的无状态性。这与session的理念是冲突的。

所以,不要硬把他们扯到一起,如果硬要这样,那我可以说,你应该检讨你的架构了。


那么如何将restlet和servlet相关联呢?
Global site tag (gtag.js) - Google Analytics