Applicazione Web con plugin: come trasferire gli ordini tra i plugin

0

Questa domanda riguarda l'architettura dell'applicazione ed è quindi indipendente dal linguaggio. Dovrebbe importare: sto usando python 3.6 e http.server .

Contesto e architettura

Sto scrivendo un software che scarica del items da un provider online. L'applicazione verrà eseguita localmente ma il design verrà eseguito con html, quindi lo sto progettando come applicazione Web su localhost.

Esistono diversi tipi di item , quindi ho una directory plugin . Ogni plugin sa come scaricare un tipo specifico di item insieme ai vari metadati. Al caricamento dell'applicazione, viene istanziato ogni plug-in. Quindi il server riceve richieste http e io ho un semplice ciclo che inoltrerà la richiesta ad ogni plugin. Per convenzione, solo un plugin prenderà il controllo del server per rispondere alla richiesta.

Ecco il flusso

    Il client
  1. invia la richiesta http
  2. server analizza l'endpoint della richiesta e inoltra a ogni plugin
  3. un plugin riconoscerà l'endpoint ed elaborerà la richiesta
  4. I plugin
  5. restituiscono una risposta http al server
  6. Il server
  7. inoltra la risposta http al client

Nota: il plugin prende effettivamente il controllo dell'istanza del server per rispondere. Quindi c'è l'accoppiamento qui. Sono contento perché il plugin dipende dall'istanza del server ma il server non dipende da un'istanza plugin specifica.

problema

Ho un plugin proxy che deve elaborare una richiesta e poi inoltrarla a un altro plug-in. Il problema è che i dati della richiesta vengono passati come POST di dati e non c'è modo in http di inoltrare i post. L'inoltro non dovrebbe richiedere alcuna azione dal client.

Posso:

[1] Prova e induci il cliente a inviare nuovamente la richiesta con una risposta javascript. Il flusso transiterà attraverso il client:

client -> server -> proxy -> client (js) -> server -> plugin2

[2] Invia una richiesta POST in modo programmatico direttamente dal plug-in. Il flusso passerà solo attraverso il server:

client -> server -> proxy -> server -> plugin2

[3] chiama il codice dell'altro plugin a livello di codice. Il flusso passerà direttamente tra i due plug-in

client -> server -> proxy -> plugin2

Le prime due opzioni sembrano hacky e la terza introdurrà l'accoppiamento tra i due plugin, che sembra una cattiva idea (ad esempio, le modifiche al codice dell'API del secondo plugin, ecc.)

Qual è la soluzione comune a questo tipo di situazione? Che cosa hai fatto in una situazione simile?

    
posta Julien__ 18.06.2018 - 13:38
fonte

0 risposte