Sto cercando di capire come creare un'applicazione Node.js / Express.js che sia un framework per l'hosting e l'esecuzione di codice di terze parti nella mia applicazione, e quali sono i termini JavaScript / Node / Express appropriati per questi concetti se sono diversi dalle altre lingue che ho usato in passato (C ++ / C # / Java).
Nello sviluppo del back-end per un'app per Android / iOS utilizzando alcune o tutte le tecnologie MEAN - almeno Express.js e Node.js - Ricevo i requisiti per configurarlo come framework, quindi le terze parti può codificare su un'API pubblicata per sviluppare plug-in / moduli per il mio back-end che potrei aver eseguito su qualche server da qualche parte.
Questa parte potrebbe essere esternalizzata a qualcun altro, nel qual caso sarei responsabile di garantire che io comunichi accuratamente i requisiti al cessionario.
Sono relativamente nuovo a Node ed Express e ho difficoltà a trovare informazioni su come scrivere codice per questo se dovessi farlo da solo. Quando provo a cercare informazioni su come creare ciò che ho descritto sopra, finisco per ricevere hit per Express stesso o Node stesso. Cercando "Express" e "framework", fondamentalmente ottengo informazioni su Express stesso poiché Express.js è un framework; Allo stesso modo, la ricerca di "Node" e "moduli" mi dà solo un sacco di informazioni su NPM da quando NPM ospita i moduli Node.
Venendo da uno sfondo C ++ / C # / Java, immagino che questa applicazione utilizzerebbe l'equivalente di qualcosa come "dlopen" per aprire manualmente l'equivalente di un file .so, .dll o .jar, trovare una classe che implementa un'interfaccia prevista e quindi chiama i metodi su tale interfaccia.
Se uno sviluppatore di terze parti crea un modulo plug-in separato per l'esecuzione nella mia applicazione, la mia comprensione è che non esiste alcun concetto di DLL o JAR in JavaScript, quindi tutto ciò che è disponibile sarebbe un file js speciale.
Se ne ho dieci di questi o un centinaio di questi da numerosi sviluppatori di terze parti, in quanto proprietario del back-end, sarei responsabile dell'aggancio di ognuno di questi nella mia applicazione in modo che la mia applicazione venga eseguita con tutti questi - con l'utente finale potenzialmente abilitando / disabilitando / configurando zero o più di questi per il proprio account tramite la propria app?
Mi chiedo se dovrei tenere conto di tre casi separati per il codice esterno:
-
Codice completamente affidabile sviluppato internamente, quindi nessuna protezione necessaria. Se non altro, questo sarebbe di aiuto per il debug, se necessario, in quanto uno strato di complessità può essere rimosso solo per entrare nel codice per farlo funzionare senza fronzoli.
-
Codice non attendibile da una terza parte arbitraria, quindi potrebbe essere utile eseguirlo nel suo processo dedicato come minimo. Per quanto riguarda il codice mal progettato, potremmo voler eseguire i nostri moduli interni in questo ambiente in produzione in ogni caso solo per la stabilità, quindi se un modulo non funziona, non ci vuole l'intera applicazione Express.
-
Codice ospitato in remoto. Potrebbe essere il caso in cui una terza parte potrebbe non voler fornire il loro codice JavaScript per l'esecuzione, oppure potrebbe voler sviluppare il proprio modulo in qualcosa di diverso da JavaScript. Se a loro è disponibile qualcosa come un'API REST e espongono un'API REST fissa, possono ospitare autonomamente il proprio codice e collegarsi al mio back-end con le chiamate al servizio web.
Ora mi sto chiedendo se il # 3 sarebbe la strada da percorrere anche per tutti i casi del # 1 e del # 2. Anche per il codice fidato, è sufficiente fornire la possibilità di inserire web hooks e alzare servizi separati, compartimentati, magari in contenitori Docker isolati sullo stesso host per un'interfaccia standardizzata, e non preoccuparsi nemmeno di "moduli" e "plug-in".