
Scrittura · 12 giu 2020
Collegare Lemmid Store alle cucine
Integrarsi con sistemi esterni che non controlli
Per l'app di ordinazione di cibo che sto costruendo, avevo bisogno di progettare un modo affidabile per collegare l'app a sistemi esterni. Questi sistemi esterni sfuggono al mio controllo diretto e comprendono diverse casse, sistemi di gestione delle cucine e stampanti di comande. Continua a leggere per scoprire come si progetta per l'ignoto e l'inaffidabile.
App per ordinare il cibo
L'app che sto costruendo è Lemmid Store, un'app facile da usare che permette alle persone di ordinare (e pagare) cibo da asporto. Trovi tutti gli articoli su Lemmid Store qui.

Sistemi esterni
La necessità di collegarsi a sistemi esterni nasce dal desiderio di integrare l'app di ordinazione nei processi aziendali legati al servizio di consegna del cibo. Pensa a cose come:
- raccogliere i dati degli ordini nei registri amministrativi (per esempio la contabilità)
- inoltrare gli ordini alle cucine, dove i pasti vengono preparati e confezionati
- fornire un accesso facile alle informazioni sul percorso, che mostrano dove va consegnato il cibo
- programmare gli ordini destinati a consegne successive

Le sfide del collegamento a sistemi esterni
Forse non te ne rendi conto, ma collegarsi a sistemi esterni può essere complicato. Se pensi all'app di ordinazione come a una specie di "motore" (come quello della tua auto), in sostanza vuoi integrare questo motore con parti esterne. Come puoi immaginare, non tutte le parti sono ugualmente adatte a stare sotto il cofano, per così dire. A rendere le cose ancora più difficili: non sai con certezza quanto siano affidabili le parti esterne. Devi progettare l'integrazione in modo che parti esterne diverse si possano collegare facilmente e che le prestazioni non dipendano dall'affidabilità di queste parti esterne.

Come con un motore a combustione, quando integri il tuo software con sistemi esterni devi considerare compatibilità e affidabilità. Non puoi dare per scontato che il software esterno:
- si adatti perfettamente
- sia sempre coerente
- sia sempre disponibile / presente
- sia affidabile
Per progettare tenendo conto di questa visione piuttosto cupa delle connessioni esterne, ho pensato fosse una buona idea far scaricare al server backend principale della mia app di ordinazione la responsabilità di collegarsi ai sistemi esterni, affidandola a un 'server connettore' costruito apposta. Il server connettore si collega poi in modo indipendente al sistema esterno. In questo modo il server principale comunica solo con parti e sistemi 'di prima parte', riducendo al minimo i rischi di incompatibilità e di possibili fermi.

Nella pratica questo significa che il 'server connettore' è in realtà una macchina diversa, con il suo software. Questa separazione ha alcuni vantaggi importanti:
- sicurezza: il server connettore non conserva un archivio completo di tutti gli ordini, solo gli ordini che devono essere inoltrati a un sistema esterno restano temporaneamente in memoria. Un eventuale problema di sicurezza in un sistema esterno esporrà una quantità minima di dati.
- si adatta a tutto: il server connettore può gestire molti protocolli diversi e molti modi di collegarsi ai sistemi esterni. Aggiungere connessioni a sistemi esterni è un po' come far 'imparare una nuova lingua' al server. Dato che 'parla già molte lingue', aggiungere un nuovo dialetto o una nuova lingua spesso è semplice. Collegarsi a API esterne diverse è più facile quando hai già tutti i mattoni per (ri)strutturare i dati.
- gestisce l'inaffidabilità: un semplice meccanismo di coda nel server connettore gli permette di gestire con eleganza eventuali fermi e problemi delle connessioni esterne. Registrando e mettendo in coda per ogni servizio esterno, si può ridurre al minimo l'impatto sulle altre parti e connessioni quando un servizio va giù.
Conclusione
Per quanto sia allettante aggiungere al volo parti nuove e sofisticate alla tua app, devi valutare con attenzione la tua configurazione per essere sicuro che funzioni in modo affidabile.
Progettare software backend che si collega ad API esterne è una sfida. Devi sperare nel meglio, ma progettare per il peggio!