12 juni 2020

Lemmid Store koppelen met keukens

Integratie met externe systemen die u niet beheert

Als onderdeel van de food-bestel-app die ik aan het bouwen ben, moest ik een betrouwbare manier ontwerpen om de app te koppelen aan externe systemen. Deze externe systemen vallen buiten mijn directe controle en omvatten verschillende kassasystemen, keukenmanagementsystemen en ticketprinters. Lees verder voor meer informatie over ontwerpen voor het onbekende en onbetrouwbare.

Bestel-app voor eten

De app die ik bouw is Lemmid Store, het is een gebruiksvriendelijke app waarmee mensen bestellingen voor afhaalmaaltijden kunnen plaatsen (en betalen). Je kunt alle_berichten_op_Lemmid_Store_hier vinden.

Lemmid Store - een app om afhaalmaaltijden te bestellen
Lemmid Store - een app om afhaalmaaltijden te bestellen

Externe systemen

De noodzaak om verbinding te maken met externe systemen wordt gedreven door de wens om de bestel-app voor eten te integreren in de bedrijfsprocessen die verband houden met de bezorgservice voor eten. Denk aan zaken als:

Geprinte ticket - via een externe verbinding - inclusief gedetailleerde bestelgegevens zoals product modifiers (keuzes van de klant per product)
Geprinte ticket - via een externe verbinding - inclusief gedetailleerde bestelgegevens zoals product modifiers (keuzes van de klant per product)

Uitdagingen met het verbinden met externe systemen

Je realiseert het je misschien niet, maar verbinding maken met externe systemen kan lastig zijn. Als je de bestel-app als een soort "motor" beschouwt (zoals in je auto), wil je deze motor in wezen integreren met externe onderdelen. Zoals je je kunt voorstellen, zijn niet alle onderdelen even geschikt om onder de figuurlijke motorkap te passen. Om het nog uitdagender te maken: je weet niet zeker hoe betrouwbaar de externe onderdelen zijn. Je moet je integratie zo ontwerpen dat verschillende externe onderdelen gemakkelijk kunnen worden aangesloten en dat de prestaties onafhankelijk zijn van de betrouwbaarheid van deze externe onderdelen.

Het integreren van externe systemen in je app is als het monteren van onderdelen van derden op een motor: je moet zorgvuldig rekening houden met de passing en betrouwbaarheid (image)
Het integreren van externe systemen in je app is als het monteren van onderdelen van derden op een motor: je moet zorgvuldig rekening houden met de passing en betrouwbaarheid (image)

Net als bij een verbrandingsmotor moet je rekening houden met de pasvorm en betrouwbaarheid wanneer je je software integreert met externe systemen. Je kunt er niet van uitgaan dat externe software:

Om te ontwerpen voor deze nogal grimmige kijk op externe verbindingen, vond ik het een goed idee om de belangrijkste backendserver van mijn bestel-app voor eten de verantwoordelijkheid voor het verbinden met externe systemen over te laten aan een speciaal gebouwde 'connectorserver'. De connectorserver zou dan onafhankelijk verbinding maken met het externe systeem. Op deze manier communiceert de hoofdserver alleen met 'first party' onderdelen en systemen, waardoor de risico's van misfits en mogelijke downtime worden geminimaliseerd.

Het scheiden van de belangrijkste backend server van de externe systemen door het introduceren van een speciaal gebouwde 'connector server'
Het scheiden van de belangrijkste backend server van de externe systemen door het introduceren van een speciaal gebouwde 'connector server'

In de praktijk betekent dit dat de 'connectorserver' eigenlijk een andere machine is, met een eigen softwarestack. Er zijn een paar belangrijke voordelen aan deze segmentatie:

Conclusie

Hoe verleidelijk het ook is om gewoon nieuwe en mooie onderdelen aan je app vast te schroeven, je moet je setup zorgvuldig overwegen om ervoor te zorgen dat deze betrouwbaar presteert.

Het ontwerpen van back-endserversoftware om verbinding te maken met externe API's is een uitdaging. Je moet hopen op het beste, maar ontwerpen voor het ergste!