---
title: "Collegare Lemmid Store alle cucine"
date: 2020-06-12
language: it
topics: ["data", "design", "lemmid-store", "networking", "programming", "server", "work"]
source_url: https://willem.com/it/2020-06-12_collegare-lemmid-store-alle-cucine/
---
# 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 (https://lemmid-store.com), un'app facile da usare che permette alle persone di ordinare (e pagare) cibo da asporto. Trovi tutti_gli_articoli_su_Lemmid_Store_qui (https://willem.com/blog/lemmid-store/).

![Lemmid Store: un'app per ordinare cibo da asporto](https://willem.com/global/images/e4dce3b523ff.webp)

## 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

![Comanda stampata, tramite una connessione esterna, con i dati dettagliati dell'ordine come i modificatori di prodotto (le scelte del cliente per ogni prodotto)](https://willem.com/global/images/2c395cf2f419.webp)

### 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.

![Integrare sistemi esterni nella tua app è come montare su un motore parti di terzi: devi valutare con attenzione compatibilità e affidabilità (immagine di un motore a combustione, pubblico dominio)](https://willem.com/global/images/a1d4ad9cd8a3.webp)

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.

![Separare il server backend principale dai sistemi esterni introducendo un 'server connettore' costruito apposta](https://willem.com/global/images/2e9aca708f2b.webp)

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!
