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
- invia la richiesta http
- server analizza l'endpoint della richiesta e inoltra a ogni plugin
- un plugin riconoscerà l'endpoint ed elaborerà la richiesta I plugin
- restituiscono una risposta http al server Il server
- 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?