节点与Python创buildRESTful Web服务

我正在为移动应用程序创buildREST API后端。 我很难决定在Python中的Twistedmatrix和NodeJs中的Express框架之间。

我已经经历了几个参考:

  1. Python REST框架build议
  2. 用于Web +移动应用程序的技术堆栈
  3. 最佳的REST API语言/框架

像所有其他孩子一样,我也有同样的要求:

  1. 易于维护。
  2. 可扩展到大stream量。
  3. 应该支持MongoDB / NoSQLs
  4. 应该是安全的, 容易authentication 。
  5. 对web服务的其他标准要求。

我了解事实:

  1. “它是规模化的解决scheme,而不是技术。”
  2. 任何技术的好解决scheme都会成功。
  3. 大多数技术堆栈都有一些大的成功案例可供夸耀。

不过,如果我必须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.js10 line Web服务器实现与nginx相当的性能。

简而言之, Python可以通过devise同步工作, tornadoTwisted允许它在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经验时,在这种情况下,你的项目的双方都将受益。