节点与Python创buildRESTful Web服务
我正在为移动应用程序创buildREST API后端。 我很难决定在Python中的Twistedmatrix和NodeJs中的Express框架之间。
我已经经历了几个参考:
- Python REST框架build议
- 用于Web +移动应用程序的技术堆栈
- 最佳的REST API语言/框架
像所有其他孩子一样,我也有同样的要求:
- 易于维护。
- 可扩展到大stream量。
- 应该支持MongoDB / NoSQLs
- 应该是安全的, 容易authentication 。
- 对web服务的其他标准要求。
我了解事实:
- “它是规模化的解决scheme,而不是技术。”
- 任何技术的好解决scheme都会成功。
- 大多数技术堆栈都有一些大的成功案例可供夸耀。
不过,如果我必须select另一个技术堆栈,应该是什么? 一方面,Nodejs提供本地asynchronous和非阻塞I / Ofunction。 但扭曲的matrix在它的小猫中有一些严重的大成功故事 。 python和其他语言也有其他的框架。 其他build议也欢迎。
我的具体问题是:我打算在python中使用Twisted Matrix来构buildRESTful API。 由于我有Python和Django的经验,代码非常整齐。 有什么杀手的理由,我应该去节点或其他技术堆栈?
请不要涉及长时间的讨论。
ps1:给出一些有关移动应用程序的想法,将其转化为基于地理位置的大规模消息传递。 REST API将不得不处理空间计算。
ps2:我准备好了信仰的飞跃。
考虑到你在你的问题中提到的一切,你愿意走信仰的飞跃 。 我想我有答案:
-
我自己是一个python-django开发者 ,因为你正在处理的问题,我不会首选
python
。 -
在将成为非常大的系统的一部分的地理应用程序中,在最终实现应用程序的第一阶段的那一刻,您将遇到并发性和优化问题。
-
我认为你应该毫不怀疑地考虑
node.js
(这可能需要时间来实现它,但将是最好的解决scheme),这是为什么:- 它本质上归功于JavaScript的devise,解决了大部分您将面临的性能问题。
- 你不需要像
nginx
这样的代理服务器来提供服务,它会再次为你节省开销。 -
它非常适用于
mongo db
,它又是一个很好的caching后端。 -
您可以使用
node.js
的10 line
Web服务器实现与nginx
相当的性能。
简而言之, Python
可以通过devise同步工作, tornado
和Twisted
允许它在exception的线程中进行async
处理 – 为什么不select一种固有的技术解决您所面临的问题?
诚然,考虑到开发人员的工作效率,我不会首选node.js
来进行网站开发。 但是我会说我们应该使用node.js
,它真正解决了一个问题,即作为解决scheme,然后是一个技术(如你在你的问题中引用)。
它的问题就像为什么使用nosqldb
当你有像postgres
这样的关系数据库? 你知道答案你可以 – 不要做与postgres
东西,你可以做像mongo nosqldb
,反之亦然。
所以,你的问题领域是node.js
所以似乎没有任何尝试重新发明与python
轮的点。
注意事项:
- 您将面临与
node.js
最初摩擦,因为它为您提供了一项新技术。 -
javascript
可能难以为python开发者维护。 - 信心的飞跃是必须的,因为您将目标locking在长期目标上,而不是短时间的在节约时间上获得经过validation的技术。
举个例子 :
- Facebook使用
php
的所有网页,但它使用固有的并发erlang
聊天。 - 考虑到
erlang
会更合乎逻辑,然后考虑python仿真。
你的问题在很大程度上取决于不是纯技术性的子问题,因为在纯粹的技术术语中,你提出的两个解决scheme之间很可能不存在真正的性能差异。 你需要问的问题如下:
1)我最熟悉哪种语言?
2)我更舒适的写什么语言?
3)如果我想让更多的人参与到这个项目中,他们将如何回答前两个问题?
4)哪个语言有更好/更全面的库来处理我的项目中会出现的常见任务?
5)在大多数托pipe环境中,哪些语言/环境更容易find/更容易在我的项目初期考虑。
甚至不要问自己“如果我的项目成为下一个Facebook,哪个技术堆栈最好?”。 如果你有足够的幸运达到这一点,你将不会使用你开始使用的技术。 不要试图过早优化。
你还应该考虑一个事实,如果你使用Node,你将能够在服务器端和客户端(如果需要的话)使用相同的语言,这可能是一个巨大的优势。 当你获得JavaScript经验时,在这种情况下,你的项目的双方都将受益。