出家如初,成佛有余

门户社区REST(Representational State Transfer)支持技术实现方案

Posted in Uncategorized by chuanliang on 2008/08/28

    在门户社区开发中,从性能角度,我们尽量采用动态页面静态化+AJAX的方式来满足性能的要求,但对于一些动态请求,按照SEO的基本原则,所有的页面请求url都应当尽量采用静态页面的形式,而不要采用动态页面形式,以提高搜索引擎的检索率。尽管目前的google及baidu等搜索引擎宣称支持动态页网的抓取,但与传统的html文件相比较抓取率仍不在一个数量级。因此在开发时候url地址不应当采用

    http://www.yeeach.com/login.action?username=myusername&passwd=mypasswd

    而应当采用采用如下形式的url请求地址:

    http://www.yeeach.com/login.action/username/myusername/passwd/mypasswd

    当然也可以采用RoR类似约定俗称的规范方式,通过规则指定对应位置的参数含义:

    http://www.yeeach.com/login.action/ myusername/mypasswd

    目前我们是基于Struts2+Spring+Hibernate的模式,采用此种模式后的开发模式后,一些开发上的调整策略:

1、 页面编写

    在编写页面时候对页面中的url链接地址采用:

    <a href=”http://www.yeeach.com/login.action/username/myusername/passwd/mypasswd”>test</a>

    的形式,而不要采用

    <a href=”http://www.yeeach.com/login.action?username=myusername&passwd=mypasswd”>test</a>的形式

2、 请求处理逻辑

    目前有如下集中方案可以选择:

  • 采用struts2或RoR、CakePHP这样的框架对REST的支持来自动完成

    功能:目前相对有限。另外Struts2官方的release包中,从2.1.2中才缺省带有此功能,以前版本必须自己由代码编译。

    性能:依赖于框架的性能处理,由于struts2中是采用filter+plugin处理,因此性能应该一般

    开发模式:需要遵循其各框架对REST约定俗称的规则。目前要让大家改变这种开发习惯,不是很容易,因此暂时不采用此种方式

  • 采用apache或lighttpd对mod_rewrite的支持来完成

    功能:对rewrite支持较为全面和丰富,由apache等来提供支持

    性能:最高

    开发模式:由mod_rewrite自动完成从http://www.yeeach.com/login.action/username/myusername/passwd/mypasswd转换为http://www.yeeach.com/login.action?username=myusername&passwd=mypasswd,然后提交给tomcat的login.action。在struts2层面后端处理逻辑与正常开发模式相同。

    但是在开发时候,需要有apache或lighttpd支持,相对麻烦,开发时候可以采用如下的UrlRewriteFilter,不采用mod_rewrite模式。

    部署模式:部署时候采用此种模式

  • 采用java的UrlRewriteFilter

    功能:实现了部分mod_rewrite的功能,但需要依赖应用服务器,对于静态页面的处理性能较差。

    性能:一般,与过滤器性能相同

    开发模式:配置UrlRewriteFilter支持,作为开始时候mod_rewrite的替代

    部署模式:采用mod_rewrite,一般情况不采用此种模式,个别情况(例如对原有接口)采用此种模式

3、 结论:

    在开发时候采用UrlRewriteFilter的支持以简化安装部署lighttpd的麻烦,在部署时候采用lighttpd的mod_rewrite来完成REST模式的支持,不采用struts2的REST Plugin。

 

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: