网页框架的局限性有多大
这是一个关于网络开发框架,比如Django和Ruby on Rails,限制性有多大的问题。
我打算建立一个RESTful网络服务,这个服务只会使用JSON或XML格式,不会有图形用户界面(GUI)。这个服务需要依赖数据库,但对于一些比较重要的操作,我发现没有简单的方法可以直接把一个“模型”对象保存到数据库表里。此外,我还需要完全控制数据写入数据库的时间和方式。我需要维护多个数据库连接,以便有些连接只用于读取数据,而其他连接只用于写入数据。
我看过一些“完整”的MVC框架,比如Django,还有一些比较基础的框架,比如web.py和pylons。现在我的感觉是,如果我一开始选择完整的框架,事情会进展得比较快,但最终我可能会遇到瓶颈,因为框架会限制我能做的事情。如果我选择一个更基础的框架,虽然需要花更多时间才能让一切运转起来,但我会有更多的自由去做我想做的事情。
我觉得情况是这样的,但我怀疑这可能是个错误的印象,因为有很多网站都是用Django和Rails写的。你能给我一些意见吗?我是不是完全错了?使用像Django或Rails这样的框架真的能轻松实现我的需求吗?还是说根据我的要求,我应该选择像web.py这样的框架?
谢谢!
11 个回答
即使你在使用一个框架,你仍然可以充分发挥这个语言的所有潜力。框架并不是限制你的东西,它其实是一个工具,可以帮助你更轻松地开发应用程序的某些部分。比如,Django和Rails这两个框架会把一些数据库的功能给简化掉,这样你只需要关注你的模型对象就可以了。不过,这并不意味着你不能自己动手做一些事情……
大多数网站都适合使用像Rails或Django这样功能丰富的框架,但你要做的是一个网络服务,这两者之间的考虑是很不一样的。
就我个人而言,我更喜欢为网络服务使用非常轻量的框架:在Python中,这主要是依赖于WSGI(这其实是一个标准,而不是框架),再加上一些高度模块化的组件,根据服务的具体需求来提供一些额外的功能(WSGI非常擅长让你把各种“中间件”模块组合在一起)。
我个人最喜欢的模块化WSGI组件集合是Werkzeug,而处理请求和响应对象我会用WebOb; 如果需要模板的话,现在我一般会选择Django模板,如果需要关系型数据库,我更喜欢直接写SQL(不过SQLAlchemy也有它的优点!)。
使用模块化组件而不是集成框架的一个好处是,你可以随时更改每一个选择(并且可以根据你的具体需求、偏好和口味自由组合!)。
网络框架通常是为了方便搭建网站而优化的,这样大多数常见的使用场景就变得简单多了。不过,一旦你开始用框架做一些“超出常规”的事情,你可能会发现,花在绕过框架上的时间比用它省下来的时间还要多。
这里很难一概而论(尤其是我主要只深入研究过Django),所以我会根据自己用Django开发JSON API的经验给出一些建议:
简单来说,我不推荐用Django来写REST API。根据我的经验,我真的没发现什么值得特别推荐的地方。我并不需要Django的模板系统,所以我主要用到的就是URL调度和ORM(对象关系映射)。即便如此,我还得做一些小手脚才能让URL调度器按我想要的方式工作——如果我不使用其他功能,其实换个URL系统会更快。再说了,Django的ORM也不太适合你的情况,因为它不支持多个数据库(除非你用的是1.2的测试版……)。再加上Django缺乏好的启动信号,Django在这个工作上看起来就不太靠谱了。
如果我是你,我会找一些特定的库来满足我的需求(比如ORM、WSGI等),而不是试图把Django改造成我需要的样子。
另外,你可能还想看看Tornado,作为一个可能的HTTP前端。它既简单又快速。