Hier geben wir Einblicke in das Unternehmen, Gedanken, How-Tos, Wissenswertes und News, die sich aus der Programmierung und Projekten ergeben. Auch unsere Open Source Aktivitäten begleiten wir hier.

Corporate Blog der prooph software GmbH

Ginger IMS – eine technische Einführung

Ginger IMS Jobs

In meinem letzten Fachartikel habe ich euch ein aktuelles Projekt von mir vorgestellt: das Ginger Interface-Management-System. Ich möchte euch heute einen ersten technischen Einblick in das System geben. Das Ginger IMS ist eine webbasierte Software zur Konfiguration und zum Monitoring von Schnittstellen. Es besteht aus einem PHP Backend und einem Single Page JavaScript Frontend – mit viel Flexibilität zur Anbindung externer Systeme.

Ginger IMS Architektur

Jobs als Kernkomponente

Beim Ginger IMS dreht sich alles um konfigurierbare Datentransfers, sogenannte Jobs. Ein Job dient in erster Linie der Gruppierung von zusammengehörigen Aufgaben. Jede Aufgabe beschreibt wiederum einen definierten Datenabgleich zwischen einem Quell- und einem Zielsystem. Damit das Ganze nicht zu theoretisch wird, hier direkt mal ein Anwendungsfall aus dem eCommerce:

Nehmen wir ein beliebiges Warenwirtschafts- und ein Onlineshop-System, beispielsweise Magento. Meine Artikel- und Lagerinformationen pflege ich in der Warenwirtschaft und diese sollen nun einmal täglich automatisch mit meinem Magento Onlineshop abgeglichen werden. Neue Bestellungen werden wiederum in die Wawi importiert, damit sich die Lagerbestände aktualisieren und Nachlieferungen bei knappem Lagerbestand in Auftrag gegeben werden können. Beide Vorgänge lassen sich zu einem Datenabgleich zusammenfassen. Dies entspricht einem Ginger IMS Job der z.B. „Wawi Magento Sync“ genannt werden könnte. Unter dem Job lege ich nun die beiden beschriebenen Aufgaben an:
1. Aufgabe: Importiere alle neuen Bestellungen aus Magento in die Warenwirtschaft. Das Quellsystem ist also der Onlineshop, die zu übertragenden Daten wären alle eingegangenen Bestellungen und das Zielsystem ist die Wawi.
2. Aufgabe: Aktualisiere die Artikeldaten im Magento Shop auf Grundlage der Änderungen in der Warenwirtschaft. Quelle und Ziel sind nun getauscht und abgeglichen wird der Artikelkatalog.

Ginger IMS ist mehr als ein Connector

Bei der Entwicklung von Schnittstellen steht ein Programmierer vor einer Vielzahl von Aufgaben. Es reicht in der Regel nicht aus, die Daten einfach vom Quellsystem in das Zielsystem zu übertragen. Meist müssen die Daten vorher für das Zielsystem aufbereitet, z.B. Attribute umbenannt und Strukturen angepasst, werden. Validierungen, Filteroperationen und auch ein Monitoring der Vorgänge sollten nicht fehlen.

Genau für diese Fälle ist das Ginger IMS entwickelt worden. Die Schnittstellen-Management-Software hängt sich als Dolmetscher zwischen zwei Systeme und vermittelt zwischen diesen, im Prinzip ähnlich einem Connector. Es gibt jedoch entscheidende Unterschiede:

  • Der Datentransfer muss nicht programmiert werden.
  • Die Aufbereitung der Daten für ein Zielsystem kann bequem über das Ginger IMS Frontend eingestellt werden, womit auch Anwender ohne Programmierkenntnisse Datentransfers erstellen können.
  • Validatoren und Filter stehen für jeden Datentransfer zur Verfügung und können sehr einfach eingebunden werden.

Ginger IMS Erweiterungen

Das Ginger IMS ist so aufgebaut, dass sich verschiedenste Komponenten in den Übertragungsprozess einschalten können und ihn damit erweitern/beeinflussen. Im folgenden Programmablaufplan habe ich die eventbasierte Routine skizziert, die sämtliche Datentransfers übernimmt. Technische Details dazu würden den Rahmen dieses Artikels sprengen. Wer sich jedoch mit ereignisgesteuerten Architekturen auskennt, bekommt mit Hilfe des PAP einen Eindruck von der Flexibilität des Ginger IMS.

Ginger IMS Task PAP

Schnittstellen-Plugins

Die Ginger IMS Schnittstellen-Plugins beschränken sich immer auf die Anbindung einer externen Software an das Ginger IMS selbst. Habe ich einmal ein Plugin für meine Warenwirtschaft programmiert, kann ich diese über das Ginger IMS mit jedem Onlineshop-System verbinden, für das ebenfalls ein Ginger IMS Schnittstellen-Plugin existiert.

Preset- und Feature-Plugins

Wer mit dem Zend Framework und Magento vertraut ist, kennt den hohen Stellenwert von Anwendungs- und Modulkonfigurationen. Dieses Konzept habe ich auf das Ginger IMS übertragen. Die Anwendung entscheidet nicht selbst, was mit den Daten auf dem Weg von A nach B passiert. Vielmehr wird dem Ginger IMS der Workflow in Form von Konfigurationen mitgeteilt.

Damit nicht nur Softwareentwickler das Ginger IMS bedienen können, sondern auch versierte Endanwender, werden die Konfigurationen Schritt für Schritt über das JavaScript Frontend vorgenommen. An dieser Stelle begegnet uns auch eine zweite Plugin-Art, die sogenannten Presets.

Ein Preset ist ein vorkonfigurierter Job, der einfach installiert werden kann, vorausgesetzt die nötigen Plugins für Quell- und Zielsystem sind vorhanden oder werden mit installiert. Eine mit dem Ginger IMS realisierte Schnittstelle zwischen System A und System B besteht somit aus mindestens 3 Teilen:

  • Schnittstellen-Plugin für System A
  • Schnittstellen-Plugin für System B
  • Job Preset für den Datentransfer zwischen System A und System B

Sollten für den Transfer spezielle Filter, Validatoren oder zusätzliche Mapping-Funktionen nötig sein, können diese ebenfalls in Form von Features installiert/konfiguriert werden.

Die Vorteile der verschiedenen Plugins und das manuelle Zusammenführen liegen auf der Hand. Ich kann auch das Schnittstellen-Plugin für System A mit einem Schnittstellen-Plugin für System C zusammenbringen oder B und C. Sogar die Features lassen sich losgelöst von einem Job für jede Ginger IMS Aufgabe verwenden.

Der Vorteil von Presets ist, dass es zwar einen roten Faden für einen Datentransfer gibt, dieser aber trotzdem konfigurierbar und somit flexibel bleibt.

Ginger IMS Basis-Plugins

Für Schnittstellen- und Feature-Plugins bringt das Ginger IMS bereits viele nützliche Basiskomponenten mit. So ist z.B. ein Modul vorinstalliert, mit dem sich SQL-Datenbanktabellen als Quell- oder Ziel-Systeme nutzen lassen. Auch für die Arbeit mit Datendateien im CSV, JSON oder XML Format gibt es bereits entsprechende Schnittstellen-Plugins. Für die Validierung und Filterung von Daten stehen sämtliche ZF2 Validatoren bzw. Filter bereit. Last but not least kann ein einmal konfigurierter Job als Preset exportiert und mit der Community geteilt werden.

Roadmap

Die grundlegende Funktionsweise des Systems sollte mit diesem Artikel klar geworden sein. Es gibt allerdings noch einiges mehr zu entdecken. Momentan arbeite ich an einem Berechtigungssystem, damit der Zugriff auf die Datentransfers beschränkt werden kann. Als letzten Punkt auf meiner Liste, bevor die erste Entwicklerversion veröffentlicht wird, habe ich die konfigurierbare Automatisierung der Jobs. Als Vorlage dient mir an der Stelle die Implementierung von Magento, bei der ein zentrales PHP Script periodisch aufgerufen wird, welches prüft, ob im System Jobs zur Ausführung anstehen.

Sie suchen einen Software Dienstleister für Ihr Projekt: Projektanfrage stellen

Blog Artikel mit ähnlichen Themen