Lemmid Store mit Küchen verknüpfen: Integration mit externen Systemen, die Sie nicht kontrollieren

June 12, 2020

Im Rahmen der Entwicklung meiner Essensbestell-App musste ich eine zuverlässige Methode entwerfen, um die App mit externen Systemen zu verbinden. Diese externen Systeme liegen außerhalb meiner direkten Kontrolle und umfassen verschiedene Kassen, Küchenmanagementsysteme und Bondrucker. Lesen Sie weiter, um mehr über das Design für das Unbekannte und Unzuverlässige zu erfahren.

Bestell-App für Essen

Die App, die ich entwickle, ist Lemmid Store. Es ist eine benutzerfreundliche App, mit der man Essen zum Mitnehmen bestellen (und bezahlen) kann. Sie finden alle Beiträge zu Lemmid Store hier.

Lemmid Store - eine App zum Bestellen von Essen zum Mitnehmen

Externe Systeme

Die Notwendigkeit, sich mit externen Systemen zu verbinden, ergibt sich aus dem Wunsch, die Bestell-App in die Geschäftsprozesse des Essenslieferdienstes zu integrieren. Denken Sie an Dinge wie:

Sammeln von Bestelldaten in Verwaltungsdatensätzen (z. B. Buchhaltung)

Weiterleiten von Bestellungen an die Küchen, wo die Gerichte zubereitet und verpackt werden

Einfacher Zugriff auf Routinginformationen, die anzeigen, wohin das Essen geliefert werden soll

Planung von Essensbestellungen, die für spätere Lieferungen vorgesehen sind

Gedrucktes Ticket - über eine externe Verbindung - einschließlich detaillierter Bestelldaten wie Produktmodifikatoren (Kundenauswahl pro Produkt)

Herausforderungen bei der Verbindung mit externen Systemen

Sie merken es vielleicht nicht, aber die Verbindung mit externen Systemen kann knifflig sein. Wenn Sie sich die Bestell-App als eine Art "Motor" (wie in Ihrem Auto) vorstellen, möchten Sie diesen Motor im Wesentlichen mit externen Teilen integrieren. Wie Sie sich vorstellen können, sind nicht alle Teile gleichermaßen geeignet, um unter die sprichwörtliche Motorhaube zu passen. Um die Sache noch schwieriger zu machen: Sie wissen nicht genau, wie zuverlässig die externen Teile sind. Sie müssen Ihre Integration so gestalten, dass verschiedene externe Teile einfach angeschlossen werden können und die Leistung unabhängig von der Zuverlässigkeit dieser externen Teile ist.

Die Integration externer Systeme in Ihre App ist wie die Anpassung von Drittanbieterteilen an einen Motor: Sie müssen deren Passform und Zuverlässigkeit sorgfältig prüfen. [image]

Wie bei einem Verbrennungsmotor müssen Sie bei der Integration Ihrer Software mit externen Systemen die Passform und Zuverlässigkeit berücksichtigen. Sie können nicht davon ausgehen, dass externe Software:

perfekt passt

immer konsistent ist

immer verfügbar / vorhanden ist

vertrauenswürdig ist

Um für diese eher düstere Sicht auf externe Verbindungen zu planen, hielt ich es für eine gute Idee, den Haupt-Backend-Server meiner Bestell-App die Verantwortung für die Verbindung mit externen Systemen an einen speziell entwickelten "Connector-Server" abzugeben. Der Connector-Server würde sich dann unabhängig mit dem externen System verbinden. Auf diese Weise kommuniziert der Hauptserver nur mit "First-Party"-Teilen und -Systemen, wodurch das Risiko von Fehlanpassungen und möglichen Ausfallzeiten minimiert wird.

Trennung des Haupt-Backend-Servers von den externen Systemen durch Einführung eines speziell entwickelten "Connector-Servers"

In der Praxis bedeutet dies, dass der "Connector-Server" tatsächlich eine andere Maschine ist, auf der ein eigener Software-Stack läuft. Diese Segmentierung bietet einige wichtige Vorteile:

Sicherheit: Der Connector-Server speichert keine vollständigen Aufzeichnungen aller Bestellungen, sondern nur die Bestellungen, die an ein externes System weitergeleitet werden müssen, werden vorübergehend im Speicher gehalten. Ein mögliches Sicherheitsproblem in einem externen System legt nur eine minimale Datenmenge offen.

Passt zu allem: Der Connector-Server kann viele verschiedene Protokolle und Möglichkeiten zur Verbindung mit externen Systemen aufnehmen. Verbindungen zu externen Systemen können hinzugefügt werden, ähnlich wie der Server "eine neue Sprache lernt". Da er bereits "mehrsprachig" ist, ist das Hinzufügen eines neuen Dialekts oder einer neuen Sprache oft einfach. Die Verbindung zu verschiedenen externen APIs ist einfacher, wenn Sie alle Bausteine zur (Re-)Strukturierung von Daten haben.

Berücksichtigung von Unzuverlässigkeit: Ein einfacher Warteschlangenmechanismus im Connector-Server ermöglicht es ihm, mögliche Ausfallzeiten und Probleme mit externen Verbindungen elegant zu behandeln. Durch die Protokollierung und Warteschlangenbildung pro externem Dienst wird es möglich, die Auswirkungen auf andere Teile und Verbindungen zu minimieren, wenn ein Dienst ausfällt.

Schlussfolgerung

So verlockend es auch ist, einfach neue und schicke Teile an Ihre App anzuschrauben, müssen Sie Ihr Setup sorgfältig prüfen, um sicherzustellen, dass es zuverlässig funktioniert.

Die Entwicklung von Backend-Server-Software für die Verbindung mit externen APIs ist eine Herausforderung. Sie müssen auf das Beste hoffen, aber für das Schlimmste planen!