2012-09-20 9 views
37

Sto creando il backend di API REST per le app mobili. Ho difficoltà a decidere tra Twisted matrix in python e Express Framework in Nodejs.Nodo vs python per la creazione di webservices RESTful

Ho passato con diversi riferimenti:

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

Come ogni altro ragazzo sul blocco, anch'io ho stessi requisiti:

  1. Di facile manutenzione.
  2. Scalabile a grande traffico.
  3. Dovrebbe supportare MongoDB/NoSQL
  4. Dovrebbe essere sicuro e easily authenticated.
  5. Altri requisiti standard per i servizi Web.

Capisco i fatti: "La sua soluzione quella scala, non la tecnologia"

  1. Una buona soluzione su qualsiasi tecnologia avrà successo.
  2. La maggior parte degli stack tecnologici ha alcune grandi storie di successo da vantare.

Ancora se devo scegliere uno stack di tecnologia rispetto all'altro, quale dovrebbe essere? Da un lato, Nodejs offre funzionalità di I/O asincrone e non bloccanti native. Ma twistedmatrix ha alcuni seriamente large success stories in its kitty. Esistono altri framework anche in Python e in altre lingue. Altri suggerimenti sono benvenuti.

La mia domanda specifica è: ho intenzione di utilizzare Twisted Matrix in python per creare API RESTful. Come ho una precedente esperienza in Python e Django, e il codice è molto pulito. C'è qualche ragione killer che dovrei andare con Node o altri stack tecnologici?

Si prega di non coinvolgere discussioni prolungate.

ps1: Per dare qualche idea sull'app per dispositivi mobili, è una messaggistica su larga scala basata su posizioni geografiche. Le API REST dovranno gestire i calcoli spaziali.

ps2: Sono pronto a fare il salto di fede.

+2

Grazie - la ricerca e le informazioni che hai inserito in questa domanda lo rendono quasi una risposta in sé. – Dave

+1

Mentre questa domanda è abbastanza buona, probabilmente è troppo soggettiva per questo sito. Una cosa da considerare è che Mongo si accoppia molto bene con JS (infatti ha un proprio interprete JS integrato), quindi andare con Node potrebbe rendere un po 'più facile lavorare con il database. – josh3736

+0

Bene lasciate che vi dica, Vai con Flask-Python Flask è molto facile da usare microframework con api molto pulito si arriva a usare MONGO REDIS entrambi con python facilmente. e per distribuire l'applicazione utilizzare uWsgi con la modalità asincrona per ottenere un elevato livello di concorrenza | uwsgi-docs.readthedocs.org/en/latest/Async.html –

risposta

18

La tua domanda dipende in gran parte da domande secondarie che non sono puramente tecniche, poiché in termini puramente tecnici è molto improbabile che ci sia una reale differenza di prestazioni tra le due soluzioni proposte. Le domande che devi porre sono le seguenti:

1) Con quale linguaggio ho più esperienza?

2) In quale lingua sto scrivendo più comodamente?

3) Se dovessi coinvolgere più persone nel progetto, come risponderebbero alle due domande precedenti?

4) Quale lingua dispone di librerie migliori/più complete per la gestione delle attività comuni che si presentano nel mio progetto?

5) Quale lingua/ambiente è più probabilità di essere trovati/più facile da impostare nella maggior parte degli ambienti di hosting che mi piacerebbe prendere in considerazione per il mio progetto nelle prime fasi.

Non pensate nemmeno di chiedervi "quale stack tecnologico sarebbe meglio se il mio progetto diventasse il prossimo Facebook?". Se sei mai abbastanza fortunato da raggiungere quel punto, non userai lo stesso stack tecnologico con cui hai iniziato. Non cercare di ottimizzare prima del tempo.

+0

Un buon lavoro per reindirizzare le domande degli OP a qualcosa di più utile. Questo dovrebbe essere il meglio che puoi ottenere per un "che è meglio. Quale dovrei usare" domanda – jdi

3

Si dovrebbe anche considerare il fatto che se si va con Node, sarete in grado di utilizzare lo stesso linguaggio in entrambi lato server e client (se necessario) che può essere un vantaggio enorme. Quando acquisisci esperienza in JavaScript, in questo caso, entrambi i lati del tuo progetto ne trarranno beneficio.

34

Considerando tutto ciò che hai indicato nella tua domanda, e sei disposto a prendere il salto di fede . Credo di avere la risposta:

  • Io essendo uno sviluppatore python-django, io non preferisco python in primo luogo a causa del problema che si sta trattando.

  • In un'applicazione geo che farà parte di un sistema molto grande, si avranno problemi di concomitanza e ottimizzazione nel momento in cui si finisce per implementare la prima fase dell'applicazione.

  • penso che si dovrebbe andare per node.js senza dubbio in mente [Si potrebbe prendere tempo per la sua attuazione, ma sarà la soluzione migliore], ecco perché:

    • E 'intrinsecamente grazie al design di javascript risolve la maggior parte dei problemi di prestazioni che dovrai affrontare.
    • Non ti servirà alcun server proxy come nginx per servirlo, ti salverà di nuovo il sovraccarico.
    • Funziona davvero bene con mongo db che funge ancora da ottimo backend cache.

    • È possibile ottenere prestazioni equivalenti a nginx con un server Web 10 line in node.js.

In poche parole, Python opere in modo sincrono in base alla progettazione e tornado e Twisted gli permette di andare async con filettatura difficile - Perché non scegliere una tecnologia che viene fornito intrinsecamente con soluzione al problema stesso che si stanno prendendo di mira?

E 'vero che io non preferisco node.js in anticipo per uno sviluppo di siti web si considera la produttività dello sviluppatore. Ma direi che dovremmo usare node.js dove risolve davvero un problema, cioè come una soluzione quindi una tecnologia (come cita nella tua domanda).

La sua una questione come il motivo per cui utilizzare un nosqldb quando si dispone di un grande database relazionale come postgres? Sai la risposta che non puoi fare cose con postgres che puoi fare con nosqldb come mongo e viceversa.

Quindi, l'area del problema è nativa per node.js quindi non sembra esserci alcun motivo di provare a reinventare la ruota con python.

Considerazioni:

  • si dovrà affrontare l'attrito iniziale con node.js fin dalla sua una nuova tecnologia per voi.
  • javascript può essere più difficile da gestire inizialmente per uno sviluppatore Python.
  • Il salto della fede è un must poiché si traggono gli obiettivi a lungo termine con questo, piuttosto che il beneficio a breve termine di risparmiare tempo su una tecnologia collaudata.

Per fare un esempio:

  • Facebook utilizza php per tutti i suoi pagine web, ma utilizza la intrinsecamente concomitante erlang per la sua chat.
  • Considerando erlang sarebbe stato più logico quindi considerando le emulazioni python.
+1

Ottima risposta! Anch'io sono più a mio agio con Python ma stavo considerando l'utilizzo di NodeJS. La tua risposta mi ha spinto verso NodeJS per tutti i motivi che hai menzionato. – CyberFonic

+0

Questa è un'ottima risposta! +1 a Yugal Jindle! – Mark

+0

Questo mi ha aiutato a farmi un'opinione, bravo! – Darpan

Problemi correlati