锁定老帖子 主题:给Ajax技术初学者的一些建议
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-14
dlee 写道 可以肯定的是,REST风格的架构设计对于面向Internet的Web应用来说,是极其重要的,尤其是一些高并发高访问量的网站。
REST风格的Web Service目前还没有进入到企业应用,企业应用的异种系统集成仍然被基于SOAP的Web Service所统治,这是因为历史原因和IBM、M$等大厂对于SOAP的支持有关。IBM和M$是SOAP最大的两个支持者,所以SOAP还会存在很多年。另外,选择SOAP目前在政治上是正确的。IBM和M$都在推这个技术,有问题了肯定不是选择这个技术的人本人的问题。 不过,REST进入企业应用只是一个时间问题,SOA完全可以建造在REST风格的Web Service之上。 同意 dlee有时间可以看看exist这个xml数据库项目 它完全支持rest。 其实只用ajax + exist就可以组建 rest ws系统。 建立一个可运行的简单实例 前后端加起来不超过5分钟 |
|
返回顶楼 | |
发表时间:2007-05-14
winterwolf 写道 leebai 写道 to dlee:
据我所了解的,目前即使国外,对Ajax后端架构的深入研究也很少(像REST理论还是很早的东西)。我预计,在Ajax/RIA前端架构之后,Ajax后端架构在今后两三年会成为技术热点。 不用等那么久。 现在就有很多 REST是 "宽化" HTTP使用(即目前主要用的GET/POST,扩展为使用HTTP所有方法); 我思路是 "窄化" HTTP使用,只使用Post,不知道有没有这方面的研究(非SOAP)。 |
|
返回顶楼 | |
发表时间:2007-05-14
---
|
|
返回顶楼 | |
发表时间:2007-05-14
dlee 写道 可以肯定的是,REST风格的架构设计对于面向Internet的Web应用来说,是极其重要的,尤其是一些高并发高访问量的网站。
REST风格的Web Service目前还没有进入到企业应用,企业应用的异种系统集成仍然被基于SOAP的Web Service所统治,这是因为历史原因和IBM、M$等大厂对于SOAP的支持有关。IBM和M$是SOAP最大的两个支持者,所以SOAP还会存在很多年。另外,选择SOAP目前在政治上是正确的。IBM和M$都在推这个技术,有问题了肯定不是选择这个技术的人本人的问题。 不过,REST进入企业应用只是一个时间问题,SOA完全可以建造在REST风格的Web Service之上。 SOAP这种缠脚布风格的东西,我也不喜欢。 REST风格的内容很多,但我认为真正有价值的地方其实就一个:缓存。但并非所有的访问信息都可以做缓存,特别是企业应用中的权限设置和数据阅读范围限制让缓存机制几乎无用武之地。 所以我感觉,REST更适于公共信息服务,对通常的企业应用未必适合。 |
|
返回顶楼 | |
发表时间:2007-05-14
leebai 写道 winterwolf 写道 leebai 写道 to dlee:
据我所了解的,目前即使国外,对Ajax后端架构的深入研究也很少(像REST理论还是很早的东西)。我预计,在Ajax/RIA前端架构之后,Ajax后端架构在今后两三年会成为技术热点。 不用等那么久。 现在就有很多 REST是 "宽化" HTTP使用(即目前主要用的GET/POST,扩展为使用HTTP所有方法); 我思路是 "窄化" HTTP使用,只使用Post,不知道有没有这方面的研究(非SOAP)。 那就和我的思想完全一样了 我现在就是完全采用post 数据和参数放到数据中. 后台用xquery对post数据进行处理 将结果返回给xmlhttp。 现在正用这个方法做一个restful ws聚合形的分布式shop. 后台没遇到任何阻力 但是我的ajax端完全是新手级的 |
|
返回顶楼 | |
发表时间:2007-05-14
只用GET和POST方法主要的问题是会使得设计更加复杂。我今天刚好与朋友讨论过这个问题,就来说一下。
假设我在服务器端有一个订单的资源,英文就是order。我为这个资源定义了一个抽象的URI: http://www.xxx.com/order 如果我只使用GET和POST方法,我就需要在这个资源后面添加额外的参数来告诉服务器我要做什么,例如: 添加一个新的order(POST方法): http://www.xxx.com/order?action=add¶m1=value1¶m2=value2 (注意:上面只是示意,实际上这是GET方法的写法,其他几个方法参数编码不是直接放在URL中,以下类似) 获得一个id为12345的order(GET方法): http://www.xxx.com/order/12345 修改一个id为12345的order(POST方法): http://www.xxx.com/order/12345?action=update¶m1=value1¶m2=value2 删除一个id为12345的order(POST方法): http://www.xxx.com/order/12345?action=delete 如果我同时使用GET/POST/PUT/DELETE 4种方法,我就可以省掉上面的action参数。 添加一个新的order(PUT方法): http://www.xxx.com/order?param1=value1¶m2=value2 获得一个id为12345的order(GET方法): http://www.xxx.com/order/12345 修改一个id为12345的order(POST方法): http://www.xxx.com/order/12345?param1=value1¶m2=value2 删除一个id为12345的order(DELETE方法): http://www.xxx.com/order/12345 可以根据方法本身的语义来执行相关的操作(在Servlet API中就是doPut、doGet、doPost、doDelete)。 只要将服务器端建模为一系列的资源,上面4种方法代表着对这些资源所做的CRUD操作,这4种操作是完备的。 另外REST非常强调HTTP操作的语义对于中间组件的可见性,因为这会极大提高中间组件缓存的效率。同时采用4种HTTP方法,可以提高HTTP操作的可见性。 |
|
返回顶楼 | |
发表时间:2007-05-14
post不是这么用的。 url后面的东西全部都可以隐藏。 理论上只用这一个url www.xxx.com 也可以
"只要将服务器端建模为一系列的资源,上面4种方法代表着对这些资源所做的CRUD操作,这4种操作是完备的。" 举个简单的例子就能打破完备性 比如加上查询条件 返回符合条件的order列表。 “另外REST非常强调HTTP操作的语义对于中间组件的可见性,因为这会极大提高中间组件缓存的效率。同时采用4种HTTP方法,可以提高HTTP操作的可见性。” 这个限制了rest的应用范围 因为要透明就只能用4个方法代表4个固定的操作。如果某个系统通过向头文件附加标记 扩展操作 那么就不透明了。 其实cocoon很早就可以利用sitmap的url匹配 减少?后面的参数 但我的经验说明完全去掉参数是不可能的 即便用ajax server不保留状态也不行。 简单易行的方法就是将参数放入post数据中。 |
|
返回顶楼 | |
发表时间:2007-05-14
winterwolf 写道 post不是这么用的。 url后面的东西全部都可以隐藏。 理论上只用这一个url www.xxx.com 也可以
你没有仔细看我上面说的话。我只是做一个示意,我不会白痴到连POST和GET如何提交数据的区别都不懂吧? winterwolf 写道 举个简单的例子就能打破完备性 比如加上查询条件 返回符合条件的order列表。
http://www.xxx.com/search/order?param1=value1¶m2=value2 winterwolf 写道 这个限制了rest的应用范围 因为要透明就只能用4个方法代表4个固定的操作。如果某个系统通过向头文件附加标记 扩展操作 那么就不透明了。
兄弟,我不是孔子,想了解孔子的思想,请自己去读《论语》。 winterwolf 写道 其实cocoon很早就可以利用sitmap的url匹配 减少?后面的参数但我的经验说明完全去掉参数是不可能的 即便用ajax server不保留状态也不行。 简单易行的方法就是将参数放入post数据中。
REST什么时候说过要完全取消CGI参数了,断章取义。 |
|
返回顶楼 | |
发表时间:2007-05-14
leebai 写道 dlee 写道 可以肯定的是,REST风格的架构设计对于面向Internet的Web应用来说,是极其重要的,尤其是一些高并发高访问量的网站。
REST风格的Web Service目前还没有进入到企业应用,企业应用的异种系统集成仍然被基于SOAP的Web Service所统治,这是因为历史原因和IBM、M$等大厂对于SOAP的支持有关。IBM和M$是SOAP最大的两个支持者,所以SOAP还会存在很多年。另外,选择SOAP目前在政治上是正确的。IBM和M$都在推这个技术,有问题了肯定不是选择这个技术的人本人的问题。 不过,REST进入企业应用只是一个时间问题,SOA完全可以建造在REST风格的Web Service之上。 SOAP这种缠脚布风格的东西,我也不喜欢。 REST风格的内容很多,但我认为真正有价值的地方其实就一个:缓存。但并非所有的访问信息都可以做缓存,特别是企业应用中的权限设置和数据阅读范围限制让缓存机制几乎无用武之地。 所以我感觉,REST更适于公共信息服务,对通常的企业应用未必适合。 soap和rest是两个完全不同的概念,各有长处!! rest是html协议的回归,动作上支持get,post,delete,put等方法。其实我们servlet,jsp,asp.net等都把html协议封装的失去原有面目了, 所以我感觉rest的概念的“技术的”退步。rest强调 资源,动作是定死的。 而soap是对 html 的扩展,包装。强调动作,如 获取,改变状态,可以包含复杂的业务操作。 我觉得从这个角度理解这两个问题。 html---->rest 静态资源 到 动态资源 服务 强调资源 jsp----->soap 模板式动作 到 扩展性/原子式 动作 强调动作 如我设计b/s的MIS系统,我不认为rest风格有多少好处,反而基本很难实现。 而我要做一服务性网站,rest可能选择不错。 |
|
返回顶楼 | |
发表时间:2007-05-14
引用 soap和rest是两个完全不同的概念,各有长处!!
rest是html协议的回归,动作上支持get,post,delete,put等方法。其实我们servlet,jsp,asp.net等都把html协议封装的失去原有面目了, 所以我感觉rest的概念的“技术的”退步。rest强调 资源,动作是定死的。 而soap是对 html 的扩展,包装。强调动作,如 获取,改变状态,可以包含复杂的业务操作。 我觉得从这个角度理解这两个问题。 html---->rest 静态资源 到 动态资源 服务 强调资源 jsp----->soap 模板式动作 到 扩展性/原子式 动作 强调动作 如我设计b/s的MIS系统,我不认为rest风格有多少好处,反而基本很难实现。 而我要做一服务性网站,rest可能选择不错。 从某种意义上来说,REST和SOAP两种互相竞争的架构。但是你对REST的观点是错误的。 REST的核心是资源,一个URI就是一项资源,针对这个URI的不同协议请求就是针对这项资源的操作,一般认为CRUD四种基本操作是完备的(在框架支持下,可以扩展更多操作),这一点已经被一些REST风格的rails的项目证实。 基于SOAP的web services没有资源的概念,从某种意义上来说,就是传统的RPC而已,只不过进行了一些封装,例如用HTTP通讯,走SOAP协议,其本质还是RPC。一个REST下面的资源,对于web services来说,至少需要分解为7个web service才能够表达同样完备的服务。 从编程的角度来说,REST简单的多,但不意味着表达能力弱,事实上REST表达能力更强,因为他是通过资源进行组织的,所以需要暴露的服务接口更少,需要的语义更简单,而且很容易解决诸如权限验证的问题(可以直接利用web当中的Session)。 目前web services的优势在于复杂的企业框架封装下的功能,提供了UDDI注册中心,有WSDL描述服务这些东西可以对服务的使用按图索骥。虽然目前大的厂商对于基于web services的SOA很推崇,但我认为基于REST的SOA就成为强有力的竞争对手。 |
|
返回顶楼 | |