2012-09-20 18 views
37

Estoy creando un API de REST para aplicaciones móviles. Tengo dificultad para decidir entre Twisted matrix en python y Express Framework en Nodejs.Nodo frente a python para crear servicios web RESTful

He pasado por varias referencias:

  1. Python REST framework recommendations
  2. Tech stack for Web+mobile apps
  3. Best language/framework for REST APIs

Como cualquier otro chico en el bloque, yo también tengo mismos requisitos:

  1. Fácil de mantener.
  2. Escalable a gran tráfico.
  3. Debe admitir MongoDB/NoSQLs
  4. Debe ser seguro y easily authenticated.
  5. Otros requisitos estándar para los servicios web.

entiendo los hechos:

  1. "Es la solución que escala, no en la tecnología."
  2. Una buena solución en cualquier tecnología será exitosa.
  3. La mayoría de las pilas de tecnología tienen algunas historias de gran éxito para jactarse.

Todavía si tengo que elegir una pila de tecnología sobre la otra, ¿cuál debería ser? Por un lado, Nodejs ofrece características nativas de E/S asincrónicas y no bloqueantes. Pero twistedmatrix tiene algunos graves large success stories in its kitty. También hay otros marcos posibles en python y otros lenguajes. Otras sugerencias son bienvenidas también.

Mi pregunta específica es: Planeo usar Twisted Matrix en python para compilar API RESTful. Como tengo experiencia previa en python y django, y el código es muy claro. ¿Hay alguna razón de peso para ir con Node u otra tecnología?

No incluya discusiones extensas.

ps1: Para dar una idea acerca de la aplicación móvil, se trata de mensajes a gran escala basados ​​en ubicaciones geográficas. Las API REST tendrán que lidiar con cálculos espaciales.

ps2: Estoy listo para dar un salto de fe.

+2

Gracias - la investigación y la información que ha puesto en esta pregunta la hace casi una respuesta en sí misma. – Dave

+1

Si bien esta pregunta es bastante buena, probablemente sea demasiado subjetiva para este sitio. Una cosa a considerar es que Mongo se empareja muy bien con JS (de hecho, tiene su propio intérprete JS incorporado), por lo que ir con Node podría hacer que trabajar con la base de datos sea un poco más fácil. – josh3736

+0

Bueno, déjame decirte, Ve con Flask-Python Frasco es muy fácil de usar microframework con api muy limpia, puedes usar MONGO REDIS ambos fácilmente con python. y para implementar su aplicación use uWsgi con modo asíncrono para lograr un alto nivel de concurrencia | uwsgi-docs.readthedocs.org/en/latest/Async.html –

Respuesta

18

Su pregunta depende en gran medida de subpreguntas que no son puramente técnicas, ya que en términos puramente técnicos es muy poco probable que exista una diferencia de rendimiento real entre sus dos soluciones propuestas. Las preguntas que debe formular son las siguientes:

1) ¿Con qué idioma tengo más experiencia?

2) ¿En qué idioma me siento más cómodo escribiendo?

3) Si tuviera que incorporar a más personas al proyecto, ¿cómo responderían a las dos preguntas anteriores?

4) ¿Qué idioma tiene bibliotecas mejores/más completas para manejar las tareas comunes que surgirán en mi proyecto?

5) ¿Qué idioma/entorno es más probable encontrar/más fácil de configurar en la mayoría de los entornos de alojamiento que consideraría para mi proyecto en las primeras etapas.

Ni siquiera pienses en preguntarte "¿qué pila de tecnología sería mejor si mi proyecto se convirtiera en el próximo Facebook?". SI alguna vez tienes la suerte de llegar a ese punto, no utilizarás la misma tecnología con la que comenzaste. No intente optimizar de forma prematura.

+0

Buen trabajo al redirigir las preguntas de OP a algo más útil. Esto debería ser lo mejor que pueda obtener para una pregunta "¿Qué es mejor? ¿Qué debo usar?" – jdi

3

También debe considerar el hecho de que si usa Node, podrá usar el mismo idioma tanto en el servidor como en el cliente (si es necesario), lo que puede ser una gran ventaja. Cuando adquiere experiencia en JavaScript, en este caso, ambas partes de su proyecto se beneficiarán.

34

Considerando todo lo que ha indicado en su pregunta, y está dispuesto a tomar el acto de fe. Creo que tengo la respuesta:

  • mí mismo ser un desarrollador python django-, no voy a preferir python, en primer lugar, debido al problema que se está tratando.

  • En una aplicación geográfica que formará parte de un sistema muy grande, tendrá problemas de simultaneidad y optimización en el momento en que termine implementando la primera fase de su aplicación.

  • creo que hay que ir por node.js sin lugar a dudas en la mente [Puede ser que tome tiempo para ponerlo en práctica, pero será la mejor solución], aquí es por qué:

    • Es inherentemente debido al diseño de Javascript resuelve la mayoría de los problemas de rendimiento que enfrentará.
    • No necesitará ningún servidor proxy como nginx para servirlo, de nuevo le ahorrará la sobrecarga.
    • Funciona muy bien con mongo db que una vez más sirve como un gran backend de caché.

    • Puede lograr un rendimiento equivalente a nginx con un servidor web 10 line en node.js.

En pocas palabras, Python obras de forma sincrónica por diseño, y tornado y Twisted le permite ir async con enhebrado complicado - ¿Por qué no elegir una tecnología que inherentemente viene con solución al mismo problema que usted están apuntando?

Es cierto que no voy a preferir node.js por adelantado para un desarrollo de sitio web teniendo en cuenta la productividad del desarrollador. Pero yo diría que deberíamos usar node.js donde realmente resuelve un problema, es decir, que viene como una solución y luego como una tecnología (como lo citan en su pregunta).

Es una pregunta como por qué usar un nosqldb cuando tienes una gran base de datos relacional como postgres? Ya sabes la respuesta que puedes, no hacer cosas con postgres que puedes hacer con nosqldb como mongo y viceversa.

Por lo tanto, su área problemática es originaria de node.js por lo que no parece tener sentido tratar de reinventar la rueda con python.

Consideraciones:

  • Usted se enfrentará a la fricción inicial con node.js ya que es una nueva tecnología para ti.
  • javascript puede ser más difícil de mantener inicialmente para un desarrollador de Python.
  • El salto de fe es imprescindible, ya que se enfoca en los objetivos a largo plazo con este beneficio, en lugar de corto plazo, de ahorrar tiempo en una tecnología probada.

como un ejemplo:

  • Facebook utiliza php para todos sus páginas web, pero utiliza el inherentemente concurrente erlang por su charla.
  • Considerando erlang hubiera sido más lógico considerar las emulaciones de Python.
+1

¡Excelente respuesta! Yo también estoy más cómodo con Python, pero estaba considerando usar NodeJS. Tu respuesta me ha empujado hacia NodeJS por todos los motivos que mencionas. – CyberFonic

+0

¡Esta es una gran respuesta! +1 a Yugal Jindle! – Mark

+0

Esto me ayudó a construir una opinión, ¡buena! – Darpan

Cuestiones relacionadas