[PyJs系列介绍]四、代理与插件

这篇主要讲js之外的PyJs扩展功能。

 

首先要讲PyJs另外一个设计原则:

系统不集成过多功能,专注于实现其的核心价值。附属功能,应该使用插件或其他的形式附加上去。

 

一个系统如果实现了过多的功能,满足了过多的需求,就会导致系统过于庞大。一方面可维护性降低,另外一方面新人入门的门槛也会增加。独立系统负责独立功能,各系统通过特殊的方式能组合在一起,这样的系统应该是更完美的。

 

PyJs的核心价值就是基于commonjs语法的本地js调试及上线打包的实现。我不希望其他任何平台级别的功能加入到这个系统里,但是很多时候我们的本地调试又会需要一些增强的功能,我们在PyJs中是以代理及插件的方式来实现这个增强。

 

Server.json

PyJs根目录下可以有一名为server.json的文件。json的内容标志了服务器的代理及插件的规则。 json中的key代表了url的匹配规则,可以为字符串或正则表达式。json中的value根据前缀不同分别作为代理或插件存在。

代理

代理的server.json中可以声明如下:

 

{
        "baidu":"http://www.baidu.com"
}


意为对于所有url中含有baidu的请求,全部抓取 http://www.baidu.com 的内容返回。

使用场景:本地ajax模拟

 

插件

server.json中还可以做一下声明:


{
        "baidu":"http://www.baidu.com",
        "combo":"plugins.combo"

} 

json中一切以plugins开头的值将被当作插件,映射到相应plugins目录下的.py文件,这里的combo请求将映射到plugins/combo.py里。

所有的plugins的py文件都需要定义一个main函数,接受一个参数,将会传入url上的search串。main函数都需要返回一个元组,值分别为响应的content-type和body。如一个最简单的插件可以写作:

 

def main(params):

    return ('text/html' , params) 


使用场景:更复杂的代理(如需要用户权限认证的);更复杂的动态请求(如模拟combo) 

 

通过代理和插件,我们基本可以完成前端的所有日常开发,如代理重定向到php服务器取模板,插件模拟用户登陆请求等。

posted @ 2011-09-21 10:50 demix 阅读(...) 评论(...) 编辑 收藏