Attualmente mi è stato assegnato un compito, in cui devo programmare una sincronizzazione bidirezionale tra due software relativi a ERP, uno che fornisce servizi web (Visual Web Reference di riferimento) e l'altro che fornisce un'API REST.
Sono riuscito a far corrispondere i campi delle API insieme, quindi ho potuto potenzialmente iniziare a creare oggetti in entrambe le API, utilizzando gli stessi dati. Tuttavia, ho raggiunto il punto della sincronizzazione effettiva ed è più difficile di quanto pensassi.
Nella mia testa, tutto va bene.
Grabbing the data -> determine, what change it is on which side -> sync the data from the source system to the target system
Ma nella codifica attuale, sto riscontrando alcuni problemi seri:
- Entrambe le API non hanno modo di dirlo, quando i dati sono stati modificati l'ultima volta, rendendo difficile determinare quale tipo di modifica è (ho pensato di avere un elenco della sincronizzazione precedente da confrontare, ma che porta a un altro problema)
- Esiste una priorità sul sistema con l'API REST, quindi se ci sono 2 modifiche contemporaneamente, la modifica dell'API REST conterebbe
- In quale ordine dovrebbero essere sincronizzati? Se c'è un focus sull'API REST, allora l'API REST dovrebbe applicare le loro modifiche dopo quella del servizio web, giusto?
- Il software di sincronizzazione verrebbe eseguito su un server, al momento in un ciclo permanente di acquisizione dei dati, confronto e applicazione delle modifiche. Mi piacerebbe solo sincronizzare i dati modificati, ma non sarebbe possibile, per quanto riguarda il problema, che non c'è modo per me di determinare, quale cambiamento si è verificato (qualcosa è stato creato, qualcosa è stato cambiato, qualcosa è stato cancellato)
Puoi darmi consigli su come realizzarlo, in modo affidabile e rispettoso delle risorse?
L'API del servizio web è molto più lenta dell'API REST, il che significa che c'è un intervallo, in cui niente viene sincronizzato (potrebbe sembrare stupido, ma pensavo di poter risolvere questo problema con un singolo thread). Potrei potenzialmente aver bisogno di multi-threading qui? L'API del servizio web è limitata a 10000 / ora, non so se questo potrebbe avere un problema.