对于restful的一点理解
(首先,我把自己的问答贴过来,不知道有没有违法。贴过来的原因是我发现我问的那个问题是个没有必要的问题。所以也关闭了问答,但为了记住这次对restful的一点理解,就给贴到了博客里,方便我以后找到。管理员别删。。谢谢)
我在javaeye发了如下的问答:
{
了解restful的人知道,restful有一个理念是要把一切资源化比如一条数据库记录,一个方法,或者一个POJO,甚至一个POJO的一个属性等等。
现在不说服务器端是如何实现的,反正无非是用一些开源框架,而且,restful客户端是不管你服务器是怎么实现的,只要客户端发送标准的http请求,restful就会处理你的请求,所以说,客户端只关心服务器端能不能处理好一件事,而不管怎么处理的。
问题来了,猛一看,服务器端把所有的东西资源化,客户端只需要向服务器端发送http请求,比如服务器端暴露了一个userlist的uri,那么,客户端想增加一个用户,只用向这个uri发送一个POST请求就行了。想删除也只用发送一个DELETE请求。看起来,真的很方便啊!可惜,事实没我想象的那么爽啊。。。
最开始我很兴奋的去写了个表单。。。method些了POST,表单里给了点值,提交,没用。。。才发现,原来,http请求,说的是以下格式的这些东西:
(Request-Line)GET/firstResource/items/?name=dsa&description=dsa1HTTP/1.1
Hostlocalhost:8182
...
...
这就很难办了。。。因为这个请求是浏览器自己包装的,restful的框架,我用的是restlet,该框架的客户端实现是用了一个叫Client的类来封装这些http请求,也就是说,只有用这个CLient类才能向服务器发送http请求。
虽然有很多框架都能封装http请求并发送。但是,这样还是很不爽。。。因为如果要实现客户端,还必须得用到第三方的东西来发送请求,这。。。并没有很方便啊。。
铺垫了这么多。我只是想问各位,谁知道什么东西能很方便实现客户端么?
}
后来研究了好多例子,发现,想实现对restful的http请求,通不通过第三方无所谓,总之想偷懒是不行。因为就算用一些插件发送http请求过去,也无法解析返回的XML。必须去实现客户端,让客户端将收到的XML转换成一个POJO或者别的有意义的东西。
通过socket也好,apache的HttpClient也好,还有很多能实现的,甚至包括.netc++都是能用来访问restfulwebservice的。
就像传统的SOAPwebservice,想要用客户端实现,也不是个特别简单的事情一样。
暂时我理解的restful与传统webservice的区别在于,传统的service要把一个请求包装成SOAP发给服务器,服务器解开SOAP,处理,再将返回信息包装成SOAP,发给客户端,客户端再解开SOAP。。。restful只是简单的发送http请求,收到http请求,简单了很多。