如果有一个url http://foo.bar/user-state 是用来专门检测用户登录状态的,是用什么方法好?
首先我先说说我自己的想法
首先排除get,因为这个url肯定不是对应的一条唯一的资源
delete也排除,原因还需要说吗?别说还需要
我感觉post可以
但似乎put也行,因为不是说put操作是幂等的么,其实就是这点不太明白,幂等是指一个用户同一段时间无论做多少次操作变化都相同还是说无论多少个用户同一段时间做多少次操作变化都相同
另外问题标签没有REST可以选,让我很困惑啊
其实关于REST的回答,已经超过了这个问答的范畴了,希望您能够采纳我的答案,还有问题的话,您可以直接发信给我
[quote]如果有一个url http://foo.bar/user-state 是用来专门检测用户登录状态的,是用什么方法好?
首先我先说说我自己的想法
首先排除get,因为这个url肯定不是对应的一条唯一的资源
delete也排除,原因还需要说吗?别说还需要
我感觉post可以
但似乎put也行,因为不是说put操作是幂等的么,其实就是这点不太明白,幂等是指一个用户同一段时间无论做多少次操作变化都相同还是说无论多少个用户同一段时间做多少次操作变化都相同
另外问题标签没有REST可以选,让我很困惑啊[/quote]
你完全可以使用http://foo.bar/user-state/xxxxuserId来检测这个xxxxxuserId用户的登陆状态,你可以使用apache http client + spring3来完成交互。
等幂的意思是,执行两次 PUT 方法与执行一次的效果相同。
我不太明白什么是问题标签,不过RESTFUL不是只能用http://foo.bar/user-state/xxxxxuserId这个样子来表示的,在JSR-311里面,你可以看到http://foo.bar/user-state/?userId=xxx&&username=xxx这种风格的http请
求([url=http://jersey.java.net/]jersey[/url]是jsr-311的一个实现,你可以参考一下)
最后说说我的想法把,rest和restful是2个东西,你可能要做的只是一个restful东西。要想真正实现rest,你得hyper text driven,这个工作客户端来做,而且实现起来非常复杂。所以我自己是不推荐来实现一个rest,玩玩还是可以
[quote]我看你的答案应该是指不同的用户用不同的url,其实那样用GET就行了吧。[/quote]
其实是URI
[quote]因为我感觉我post了一个查询,但是无论我post了多少个查询,同一个用户得到的结果都一样,这又有点像put[/quote]
这里你得考虑到HTTP的“潜规则”
get = query
post = insert
put = update
delete = delete
[quote]我觉得http://foo.bar/user-state/?userId=xxx&username=xxx和http://foo.bar/user-state/xxxxxuserId本质上并没有什么区别啊[/quote]
一个是URI,统一资源标识符
一个是通过查询条件获得的
前者是REST规范的
后者是REST风格的
[quote]既然你如此强调是URI,那我想问的是在你说的此种情况,为什么说URL不准确? [/quote]
URI是URL的超集,URI可以是RUL或者RUN,这个你可以去google一下,因为会长篇大论还可能说不清楚
[quote]我提出的问题我是无法用“潜规则”来描述,因为他既没有insert 也没有update,需求是query没错,不过却不是get(不同的用户对同一个uri进行get却会得到不同的结果,这肯定不是了吧)
[/quote]
你用post也可以,用post代替get也是可以的,因为http总是用request和response的,你不需要在等幂问题上考虑太多。
[quote]最后一个问题用是否带有?来区别是restful和rest我感觉道理不明显,你能详细说下么?就好比一片文章的url,难道http://foo.bar/article/1 和 http://foo.bar/artilce?id=1 有不一样?他们都是id为1的article的uniform resource identifier, 为什么说第二种带?的就是restful的而不是rest的?[/quote]
这个是我个人的理解,我希望rest是flat的,而不是带有?这种情况,我觉得这个很ugly,感觉是以前的wsdl风格,我希望查询变成/user/xxxx/username/xxxx 这样
准确的说,REST与RESTFUL最大阿区别是是否实现了超文本驱动。
此外,推荐你看一下REST的论文
http://www.iteye.com/news/52