Keine Bearbeitungszusammenfassung Markierung: 2017-Quelltext-Bearbeitung |
|||
| Zeile 1: | Zeile 1: | ||
=REST-Schnittstelle= | =REST-Schnittstelle= | ||
Ab dem SuperX-Kernmodul 6.0 steht eine REST-Schnittstelle zur Verfügung, über die zentrale Funktionen von SuperX auch über Weboberflächen, Skripte und externe Anwendungen angesprochen werden können. | |||
Die REST-Schnittstelle ergänzt die bestehenden SuperX-Funktionen. Vorhandene ETL-, Batch- und Maskenprozesse werden dabei nicht ersetzt, sondern über HTTP-Endpunkte zusätzlich erreichbar gemacht. | |||
Zu den wichtigsten Einsatzbereichen gehören: | |||
* Komponentenverwaltung und ETL-Jobs | |||
* Status- und Protokollabfragen | |||
* SuperX-Masken und deren Eingabefelder | |||
* Ausführung von Masken und Abruf der Ergebnistabellen | |||
* Export von Berichtsergebnissen | |||
* Einbindung von SuperX-Funktionen in eigene Weboberflächen | |||
In den folgenden Beispielen wird diese Beispielinstallation verwendet: | |||
= | <source lang="text"> | ||
https://demo.superx-testserver.de/superx/ | |||
</source> | |||
Bei einer eigenen Installation müssen lediglich Domain und gegebenenfalls der Kontextpfad angepasst werden. | |||
== | ==Grundlagen== | ||
Die REST- | Die REST-Endpunkte befinden sich unterhalb von: | ||
<source lang="text"> | |||
https://demo.superx-testserver.de/superx/ds/api/ | |||
</source> | |||
Die Schnittstelle liefert überwiegend JSON zurück. Lesende Aufrufe werden in der Regel mit HTTP GET ausgeführt. Einige Funktionen benötigen HTTP POST, insbesondere das Ausführen von SuperX-Masken. | |||
Die REST-Schnittstelle verwendet die normale SuperX-Authentifizierung. Wird sie aus einer bereits angemeldeten Browser-Sitzung aufgerufen, kann die vorhandene Session verwendet werden. | |||
==Einrichtung und Voraussetzungen== | |||
Die REST-Schnittstelle ist Bestandteil des Kernmoduls 6.0 und der SuperX-Webapp. Eine separate REST-Anwendung muss nicht installiert werden. | |||
Voraussetzung ist zunächst eine grundsätzlich funktionierende SuperX-Installation: | |||
* die SuperX-Webapp ist über Tomcat erreichbar, | |||
* die Datenbankverbindung funktioniert, | |||
* ein aktueller Kernstand ist installiert, | |||
* die benötigten Modulverzeichnisse sind eingebunden, | |||
* die ETL- und Jobdefinitionen wurden eingelesen. | |||
===Aktuelles Kernpaket verwenden=== | ===Aktuelles Kernpaket verwenden=== | ||
Für die REST-Schnittstelle und die Komponentenverwaltung sollte ein aktuelles | Für die REST-Schnittstelle und die Komponentenverwaltung sollte ein aktuelles Kernpaket ab Kern 6.0 verwendet werden. | ||
Beispiel | Beispiel: | ||
<source lang="bash"> | <source lang="bash"> | ||
| Zeile 69: | Zeile 58: | ||
</source> | </source> | ||
Bei einem Kern-Upgrade sollte darauf geachtet werden, dass keine veralteten Bibliotheken aus einem älteren Kernstand in <code>WEB-INF/lib</code> liegen bleiben. | |||
Vor Änderungen sollten lokale Anpassungen und projektspezifische Konfigurationen gesichert werden. | |||
Nach einem Upgrade sollten insbesondere folgende Dateien geprüft werden: | |||
<source lang="text"> | <source lang="text"> | ||
WEB-INF/classes/spring-batch.properties | |||
WEB-INF/classes/hikari.properties | |||
WEB-INF/classes/quartz.properties | |||
</source> | </source> | ||
===Datenbankverbindung prüfen=== | ===Datenbankverbindung prüfen=== | ||
Die REST-Schnittstelle verwendet die Datenbankverbindung der Webapp. In der dbforms-config.xml sollte | Die REST-Schnittstelle verwendet die Datenbankverbindung der Webapp. In der <code>dbforms-config.xml</code> sollte der <code>SpringBeanConnectionProvider</code> verwendet werden: | ||
<source lang="xml"> | <source lang="xml"> | ||
| Zeile 102: | Zeile 82: | ||
</source> | </source> | ||
Wenn hier noch eine ältere oder projektspezifische Verbindungsdefinition verwendet wird, kann die REST-Schnittstelle zwar erreichbar sein, aber beim Zugriff auf | Wenn hier noch eine ältere oder projektspezifische Verbindungsdefinition verwendet wird, kann die REST-Schnittstelle zwar grundsätzlich erreichbar sein, aber beim Zugriff auf Komponenten, Jobs oder Masken fehlschlagen. | ||
=== | ===module_ignore.properties prüfen=== | ||
Für die Komponentenverwaltung muss folgende Datei vorhanden sein: | |||
<source lang="text"> | <source lang="text"> | ||
WEB-INF/conf/edustore/db/module/module_ignore.properties | |||
</source> | </source> | ||
Beispielinhalt: | |||
<source lang="text"> | <source lang="text"> | ||
ignore.modules=kennx,gxstage,bil | |||
</source> | </source> | ||
Fehlt die Datei, können beim Einlesen der Komponenten oder beim Aufruf der Komponentenliste Fehler auftreten. | |||
===Modulverzeichnisse bereitstellen=== | |||
Die Komponentenverwaltung liest verfügbare Komponenten und ETL-Jobs aus: | |||
<source lang=" | <source lang="text"> | ||
WEB-INF/conf/edustore/db/module | |||
</source> | </source> | ||
Modulverzeichnisse können direkt dort abgelegt oder per symbolischem Link eingebunden werden. | |||
Beispiel: | |||
<source lang="bash"> | <source lang="bash"> | ||
cd $ | cd $WEBAPP/WEB-INF/conf/edustore/db/module | ||
ln -s $MODUL_VERZEICHNIS . | ln -s $MODUL_VERZEICHNIS . | ||
</source> | </source> | ||
===Zusätzliche Kern-ETL-Dateien prüfen=== | |||
Für einzelne Funktionen der Komponentenverwaltung werden zusätzliche ETL-Dateien benötigt, insbesondere für das Entladen und Wiedereinspielen von Konfigurationen. | |||
Quellverzeichnis im SuperX-Git: | |||
<source lang=" | <source lang="text"> | ||
SUPERX_GIT/superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update | |||
</source> | </source> | ||
Zielverzeichnis in der Webapp: | |||
<source lang="text"> | |||
$WEBAPP/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update | |||
<source lang=" | |||
</source> | </source> | ||
Benötigte Dateien: | |||
* edustore_kern_man_unload_config_ids.xml | |||
* edustore_kern_man_unload_config_pg.xml | |||
* edustore_kern_man_upload_config_ids.xml | |||
* edustore_kern_man_upload_config_pg.xml | |||
Falls diese Dateien im verwendeten Kernpaket noch fehlen, müssen sie aus dem SuperX-Git ergänzt werden. | |||
===ETL-Steuerdaten einlesen=== | |||
Nach Änderungen an Kern, Modulverzeichnissen oder Jobdefinitionen müssen die ETL-Steuerdaten neu eingelesen werden. | |||
Beispiel: | |||
<source lang="bash"> | <source lang="bash"> | ||
cd $WEBAPP | |||
java -classpath "./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*" \ | |||
"de.superx.bin.ComponentAdminCLI" -r | |||
</source> | </source> | ||
Der Parameter <code>-r</code> liest die Komponenten- und Jobdefinitionen neu ein. | |||
Alternativ kann dafür auch der entsprechende REST-Endpunkt verwendet werden: | |||
<source lang="text"> | <source lang="text"> | ||
https:// | https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb | ||
</source> | </source> | ||
===Einzelnen Job über die CLI testen=== | |||
Wenn unklar ist, ob ein Fehler in der REST-Schnittstelle oder bereits in der ETL-Konfiguration liegt, kann ein einzelner Job testweise direkt über die CLI gestartet werden. | |||
Beispiel: | |||
<source lang=" | <source lang="bash"> | ||
cd $WEBAPP | |||
java -classpath "./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*" \ | |||
"de.superx.bin.ComponentAdminCLI" -e hrstage_load_and_transform | |||
</source> | </source> | ||
Funktioniert der Job bereits über die CLI nicht, sollten zunächst Moduldateien, Pfade, Datenbanktabellen und ETL-Konfiguration geprüft werden. | |||
=== | ===Tomcat neu starten=== | ||
Nach Änderungen an Bibliotheken, Klassen, Spring-Konfigurationen oder Moduldateien sollte Tomcat neu gestartet werden. | |||
Beispiel | Beispiel: | ||
<source lang=" | <source lang="bash"> | ||
systemctl restart tomcat10 | |||
</source> | </source> | ||
Je nach Installation kann der Dienst auch anders heißen. | |||
===REST-Schnittstelle prüfen=== | |||
Nach der Einrichtung sollten zunächst einfache Listenaufrufe getestet werden: | |||
<source lang="text"> | <source lang="text"> | ||
https:// | https://demo.superx-testserver.de/superx/ds/api/etl/list | ||
</source> | </source> | ||
<source lang="text"> | <source lang="text"> | ||
https:// | https://demo.superx-testserver.de/superx/ds/api/etl/job/list | ||
</source> | </source> | ||
Wenn beide Aufrufe JSON zurückliefern, ist die REST-Schnittstelle für die Komponentenverwaltung grundsätzlich erreichbar. | |||
Für Masken kann zusätzlich ein einfacher Formularaufruf getestet werden: | |||
<source lang="text"> | <source lang="text"> | ||
https:// | https://demo.superx-testserver.de/superx/ds/api/form/71030 | ||
</source> | </source> | ||
===Fehlersuche bei der Einrichtung=== | |||
Bei Problemen sollten insbesondere folgende Punkte geprüft werden: | |||
{| class="wikitable" | |||
!Problem!!Prüfung | |||
|- | |||
|REST-Endpunkt liefert HTTP 500 | |||
|Tomcat-Log prüfen, Datenbankverbindung und Spring-Konfiguration kontrollieren. | |||
|- | |||
|Komponentenliste ist leer oder fehlerhaft | |||
|Modulverzeichnis und <code>module_ignore.properties</code> prüfen. | |||
|- | |||
|Jobs fehlen | |||
|ETL-Steuerdaten mit <code>ComponentAdminCLI -r</code> oder über <code>/etl/job/writeJobsToDb</code> neu einlesen. | |||
|- | |||
|Job funktioniert über REST nicht | |||
|Denselben Job testweise über die CLI starten und Tomcat-Log prüfen. | |||
|- | |||
|Spezialjobs fehlen | |||
|Zusätzliche ETL-XML-Dateien im Verzeichnis <code>edustore_update</code> prüfen. | |||
|- | |||
|REST-Aufruf funktioniert nach einem Upgrade nicht | |||
|Bibliotheken in <code>WEB-INF/lib</code> sowie <code>spring-batch.properties</code>, <code>hikari.properties</code> und <code>quartz.properties</code> prüfen. | |||
|- | |||
|POST auf eine Maske liefert "Required request body is missing" | |||
|Einen JSON-Body mitsenden, mindestens <code>{}</code>. | |||
|- | |||
|POST liefert "application/octet-stream is not supported" | |||
|Header <code>Content-Type: application/json</code> setzen. | |||
|} | |||
In einzelnen Testumgebungen kann es beim Einlesen der ETL-Steps außerdem zu Konflikten mit vorhandenen Datenbankindizes kommen. Ein solcher Eingriff sollte nur vorgenommen werden, wenn die konkrete Fehlermeldung darauf verweist. | |||
==Komponentenverwaltung und ETL== | |||
Über die ETL-Schnittstelle können Komponenten angezeigt, Jobs ermittelt und Verarbeitungsläufe gestartet oder überwacht werden. | |||
Der Basis-Pfad lautet: | |||
<source lang="text"> | <source lang="text"> | ||
https://demo.superx-testserver.de/superx/ds/api/etl | |||
</source> | </source> | ||
===Übersicht der wichtigsten ETL-Aufrufe=== | |||
{| class="wikitable" | {| class="wikitable" | ||
! | !Funktion | ||
!Methode | |||
!Beispiel | |||
!Zweck | |||
|- | |||
|Komponenten anzeigen | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/list</code> | |||
|Liefert die bekannten beziehungsweise installierten SuperX-Komponenten mit technischen Informationen. | |||
|- | |||
|Installierbare Komponenten | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/installables/list</code> | |||
|Zeigt Komponenten, die grundsätzlich installiert werden können. | |||
|- | |- | ||
| | |Alle ETL-Jobs | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/list</code> | |||
|Liefert alle bekannten ETL- und Batch-Jobs. | |||
|- | |- | ||
| | |Jobs einer Komponente | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/list/hrstage</code> | |||
|Zeigt nur die Jobs einer bestimmten Komponente. | |||
|- | |- | ||
| | |Jobdetails | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/hrstage_load_and_transform</code> | |||
|Liefert technische Informationen zu einem bestimmten Job. | |||
|- | |- | ||
| | |Jobdefinitionen neu einlesen | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb</code> | |||
|Liest die vorhandenen Jobdefinitionen erneut in die Datenbank ein. | |||
|- | |- | ||
| | |Job starten | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/execute/eduetl/hrstage_load_and_transform</code> | |||
|Startet einen bestimmten Job und liefert eine JobExecutionId zurück. | |||
|- | |- | ||
| | |Installation starten | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/install/hrstage</code> | |||
|Startet die Installation einer Komponente. | |||
|- | |- | ||
| | |Upgrade starten | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/upgrade/hrstage</code> | |||
|Startet ein Upgrade einer installierten Komponente. | |||
|- | |- | ||
| | |Alle Upgrades starten | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/upgrade_all</code> | |||
|Startet beziehungsweise verarbeitet anstehende Upgrades mehrerer Komponenten. | |||
|- | |- | ||
| | |Komponente deinstallieren | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/uninstall/hrstage</code> | |||
|Startet die Deinstallation einer Komponente. | |||
|- | |- | ||
| | |Unload starten | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/unload/hrstage</code> | |||
|Startet den Unload einer Komponente. | |||
|- | |- | ||
| | |Transform starten | ||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/transform/hrstage</code> | |||
|Startet die Transformation bereits vorhandener Daten. | |||
|- | |||
|Complete starten | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/complete/hrstage</code> | |||
|Startet modulabhängige Abschlussarbeiten. | |||
|- | |||
|Installationsfunktionen | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/installFunctions/hrstage</code> | |||
|Zeigt zusätzliche Installationsfunktionen einer Komponente. | |||
|- | |||
|Laufende Jobs | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/running</code> | |||
|Zeigt aktuell laufende Jobs. | |||
|- | |||
|Jobstatus | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/jobExecutionStatus/12345</code> | |||
|Liefert den aktuellen Status einer Jobausführung. | |||
|- | |||
|Joblog | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/jobLog/12345</code> | |||
|Liefert das Protokoll einer Jobausführung. | |||
|- | |||
|Jobausführungen | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/jobExecutionInfos</code> | |||
|Liefert Informationen zu Jobausführungen. | |||
|- | |||
|Job stoppen | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/stop/12345</code> | |||
|Stoppt eine bestimmte Jobausführung. | |||
|- | |||
|Job starten oder fortsetzen | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/start/12345</code> | |||
|Spricht eine vorhandene Jobausführung erneut an. | |||
|- | |||
|Alle Jobs stoppen | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/etl/job/stopAll</code> | |||
|Stoppt alle laufenden Jobs. | |||
|} | |} | ||
===Typischer ETL-Ablauf=== | |||
Eine Anwendung sollte die verfügbaren Jobs möglichst nicht fest hinterlegen, sondern dynamisch über die REST-Schnittstelle ermitteln. | |||
Ein typischer Ablauf für ein Modulupdate ist: | |||
<source lang="text"> | <source lang="text"> | ||
1. Komponenten laden | |||
/etl/list | |||
2. Jobs des Moduls laden | |||
/etl/job/list/hrstage | |||
3. Gewünschten Job starten | |||
/etl/job/execute/eduetl/hrstage_unload_load_transform | |||
4. Jobstatus abfragen | |||
/etl/jobExecutionStatus/12345 | |||
5. Jobprotokoll anzeigen | |||
/etl/jobLog/12345 | |||
</source> | </source> | ||
Der Start eines Jobs liefert normalerweise eine JobExecutionId. Diese ID wird anschließend für Status- und Logabfragen verwendet. | |||
Spezialjobs wie beispielsweise | |||
<source lang="text"> | <source lang="text"> | ||
kern_unload_config_special | |||
kern_upload_config_special | |||
</source> | </source> | ||
können ebenfalls über den generischen Execute-Endpunkt gestartet werden. | |||
==SuperX-Masken und Berichte== | |||
Auch SuperX-Masken können über die REST-Schnittstelle angesprochen werden. Dadurch lassen sich Maskendefinitionen, Eingabefelder und Ergebnisdaten unabhängig von der klassischen SuperX-Oberfläche verwenden. | |||
Als Beispiel wird im Folgenden die Maske mit der TID 71030 verwendet. | |||
===Übersicht der wichtigsten Masken- und Berichtsaufrufe=== | |||
{| class="wikitable" | |||
GET /superx/ds/api/ | !Funktion | ||
</ | !Methode | ||
!Beispiel | |||
!Zweck | |||
|- | |||
|Maskenaufbau laden | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/form/71030</code> | |||
|Liefert die Eingabefelder der Maske mit Feldtypen, Defaultwerten, Auswahllisten und weiteren Eigenschaften. | |||
|- | |||
|Abhängige Felder aktualisieren | |||
|POST | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/form/71030/inputupdate</code> | |||
|Berechnet abhängige Maskenfelder nach Änderung eines Eingabefeldes neu. | |||
|- | |||
|Informationen zur Maske | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/report?tid=71030</code> | |||
|Liefert Metadaten der Maske wie TID, Name, Beschreibung und Sachgebiet. | |||
|- | |||
|Maske ausführen | |||
|POST | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/report?tid=71030</code> | |||
|Führt die Maske aus und liefert die Ergebnistabelle als JSON. | |||
|- | |||
|Ergebnis-Stylesheets | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/report/stylesheets?tid=71030</code> | |||
|Zeigt die für die Maske verfügbaren Ergebnis-Stylesheets. | |||
|- | |||
|Sichten eines Feldes | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/report/views?tid=71030&fieldName=Institution</code> | |||
|Liefert die verfügbaren Sichten beziehungsweise Hierarchien eines Maskenfeldes. | |||
|- | |||
|Inhalt einer Sicht | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/report/view?tid=71030&fieldName=Institution&viewId=...</code> | |||
|Liefert den Inhalt einer bestimmten Sicht. | |||
|- | |||
|Bericht herunterladen | |||
|POST | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/report/download?tid=71030</code> | |||
|Erzeugt einen Export des Berichtsergebnisses. | |||
|- | |||
|Themenbaum | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/menu/tree</code> | |||
|Liefert den für den angemeldeten Benutzer sichtbaren SuperX-Themenbaum. | |||
|- | |||
|Teil des Themenbaums | |||
|GET | |||
|<code>https://demo.superx-testserver.de/superx/ds/api/menu?tid=71030</code> | |||
|Liefert einen bestimmten Bereich des Themenbaums. | |||
|} | |||
===Masken verwenden=== | |||
Der Aufruf | |||
<source lang="text"> | <source lang="text"> | ||
https://demo.superx-testserver.de/superx/ds/api/form/71030 | |||
</source> | </source> | ||
liefert unter anderem: | |||
* Namen der Eingabefelder | |||
* Feldtypen | |||
* Beschriftungen | |||
* Pflichtfelder | |||
* Defaultwerte | |||
* Auswahllisten | |||
* Baum- beziehungsweise TreeSelect-Inhalte | |||
* verfügbare Stylesheets | |||
Damit kann eine eigene Oberfläche die Eingabemaske dynamisch aufbauen. | |||
Zum eigentlichen Ausführen einer Maske wird der Report-Endpunkt mit HTTP POST verwendet: | |||
<source lang="text"> | <source lang="text"> | ||
POST https://demo.superx-testserver.de/superx/ds/api/report?tid=71030 | |||
</source> | </source> | ||
Der Request benötigt: | |||
<source lang=" | <source lang="text"> | ||
Content-Type: application/json | |||
</source> | </source> | ||
Auch wenn keine Maskenparameter gesetzt werden sollen, muss ein gültiger JSON-Body mitgegeben werden: | |||
<source lang="json"> | <source lang="json"> | ||
{} | |||
</source> | </source> | ||
Sollen Felder gesetzt werden, werden diese über den JSON-Body übergeben. | |||
Beispiel: | Beispiel: | ||
<source lang="json"> | <source lang="json"> | ||
{ | { | ||
" | "Kennung": "admin", | ||
" | "Gruppe": "", | ||
" | "Name": "", | ||
"Institution": "" | |||
" | |||
} | } | ||
</source> | </source> | ||
Die Antwort enthält die Ergebnistabelle als JSON. | |||
===POST-Aufruf im Browser testen=== | |||
GET-Aufrufe können direkt über die Adresszeile des Browsers getestet werden. | |||
GET | |||
Für POST-Aufrufe kann beispielsweise in Firefox die Netzwerkanalyse verwendet werden: | |||
# Entwicklertools mit F12 öffnen. | |||
# ''Netzwerkanalyse'' auswählen. | |||
# Einen REST-Aufruf markieren und ''Bearbeiten und erneut senden'' auswählen. | |||
# Methode von GET auf POST ändern. | |||
# Header ergänzen: | |||
#:<code>Content-Type: application/json</code> | |||
# Unter ''Inhalt'' mindestens folgenden JSON-Body eintragen: | |||
#:<code>{}</code> | |||
# Anfrage senden. | |||
Ein korrekt übertragener leerer JSON-Body führt beispielsweise zu: | |||
<source lang="text"> | <source lang="text"> | ||
Content-Type: application/json | |||
Content-Length: 2 | |||
</source> | </source> | ||
Typische Fehler: | |||
{| class="wikitable" | |||
!Fehler!!Ursache!!Lösung | |||
</ | |- | ||
|<code>Required request body is missing</code> | |||
|Der POST-Request enthält keinen Body. | |||
|Mindestens <code>{}</code> als Inhalt mitsenden. | |||
|- | |||
|<code>Content-Type 'application/octet-stream' is not supported</code> | |||
|Der Body wird ohne passenden Content-Type übertragen. | |||
|<code>Content-Type: application/json</code> setzen. | |||
< | |} | ||
</ | |||
==Hinweise zur Verwendung== | |||
REST-Endpunkte können abhängig von ihrer Funktion Daten verändern oder umfangreiche Verarbeitungsläufe starten. Insbesondere Installation, Upgrade, Deinstallation und ETL-Jobs sollten daher nur für entsprechend berechtigte Benutzer verfügbar sein. | |||
Für eigene Weboberflächen empfiehlt es sich, Komponenten, Jobs und Masken dynamisch über die REST-Schnittstelle zu ermitteln. Dadurch müssen neue Module, Spezialjobs oder zusätzliche Masken nicht fest in der Oberfläche hinterlegt werden. | |||
Für die Komponentenverwaltung sind insbesondere die Kombinationen aus | |||
<source lang="text"> | <source lang="text"> | ||
/etl/list | |||
/etl/job/list/{component} | |||
</source> | </source> | ||
und für Masken | |||
<source lang="text"> | <source lang="text"> | ||
/form/{tid} | |||
/report?tid={tid} | |||
</source> | </source> | ||
relevant. | |||
Version vom 22. September 2026, 08:09 Uhr
REST-Schnittstelle
Ab dem SuperX-Kernmodul 6.0 steht eine REST-Schnittstelle zur Verfügung, über die zentrale Funktionen von SuperX auch über Weboberflächen, Skripte und externe Anwendungen angesprochen werden können.
Die REST-Schnittstelle ergänzt die bestehenden SuperX-Funktionen. Vorhandene ETL-, Batch- und Maskenprozesse werden dabei nicht ersetzt, sondern über HTTP-Endpunkte zusätzlich erreichbar gemacht.
Zu den wichtigsten Einsatzbereichen gehören:
- Komponentenverwaltung und ETL-Jobs
- Status- und Protokollabfragen
- SuperX-Masken und deren Eingabefelder
- Ausführung von Masken und Abruf der Ergebnistabellen
- Export von Berichtsergebnissen
- Einbindung von SuperX-Funktionen in eigene Weboberflächen
In den folgenden Beispielen wird diese Beispielinstallation verwendet:
https://demo.superx-testserver.de/superx/
Bei einer eigenen Installation müssen lediglich Domain und gegebenenfalls der Kontextpfad angepasst werden.
Grundlagen
Die REST-Endpunkte befinden sich unterhalb von:
https://demo.superx-testserver.de/superx/ds/api/
Die Schnittstelle liefert überwiegend JSON zurück. Lesende Aufrufe werden in der Regel mit HTTP GET ausgeführt. Einige Funktionen benötigen HTTP POST, insbesondere das Ausführen von SuperX-Masken.
Die REST-Schnittstelle verwendet die normale SuperX-Authentifizierung. Wird sie aus einer bereits angemeldeten Browser-Sitzung aufgerufen, kann die vorhandene Session verwendet werden.
Einrichtung und Voraussetzungen
Die REST-Schnittstelle ist Bestandteil des Kernmoduls 6.0 und der SuperX-Webapp. Eine separate REST-Anwendung muss nicht installiert werden.
Voraussetzung ist zunächst eine grundsätzlich funktionierende SuperX-Installation:
- die SuperX-Webapp ist über Tomcat erreichbar,
- die Datenbankverbindung funktioniert,
- ein aktueller Kernstand ist installiert,
- die benötigten Modulverzeichnisse sind eingebunden,
- die ETL- und Jobdefinitionen wurden eingelesen.
Aktuelles Kernpaket verwenden
Für die REST-Schnittstelle und die Komponentenverwaltung sollte ein aktuelles Kernpaket ab Kern 6.0 verwendet werden.
Beispiel:
wget https://super-ics.de/superx/dist/kern6.0b_superx_utf8_POSTGRES_patch.tar.gz
Bei einem Kern-Upgrade sollte darauf geachtet werden, dass keine veralteten Bibliotheken aus einem älteren Kernstand in WEB-INF/lib liegen bleiben.
Vor Änderungen sollten lokale Anpassungen und projektspezifische Konfigurationen gesichert werden.
Nach einem Upgrade sollten insbesondere folgende Dateien geprüft werden:
WEB-INF/classes/spring-batch.properties
WEB-INF/classes/hikari.properties
WEB-INF/classes/quartz.properties
Datenbankverbindung prüfen
Die REST-Schnittstelle verwendet die Datenbankverbindung der Webapp. In der dbforms-config.xml sollte der SpringBeanConnectionProvider verwendet werden:
<dbconnection connectionProviderClass="de.superx.db.SpringBeanConnectionProvider"
default="true"
id="datasourceBean"
isJndi="false"
isPow2="true"/>
Wenn hier noch eine ältere oder projektspezifische Verbindungsdefinition verwendet wird, kann die REST-Schnittstelle zwar grundsätzlich erreichbar sein, aber beim Zugriff auf Komponenten, Jobs oder Masken fehlschlagen.
module_ignore.properties prüfen
Für die Komponentenverwaltung muss folgende Datei vorhanden sein:
WEB-INF/conf/edustore/db/module/module_ignore.properties
Beispielinhalt:
ignore.modules=kennx,gxstage,bil
Fehlt die Datei, können beim Einlesen der Komponenten oder beim Aufruf der Komponentenliste Fehler auftreten.
Modulverzeichnisse bereitstellen
Die Komponentenverwaltung liest verfügbare Komponenten und ETL-Jobs aus:
WEB-INF/conf/edustore/db/module
Modulverzeichnisse können direkt dort abgelegt oder per symbolischem Link eingebunden werden.
Beispiel:
cd $WEBAPP/WEB-INF/conf/edustore/db/module
ln -s $MODUL_VERZEICHNIS .
Zusätzliche Kern-ETL-Dateien prüfen
Für einzelne Funktionen der Komponentenverwaltung werden zusätzliche ETL-Dateien benötigt, insbesondere für das Entladen und Wiedereinspielen von Konfigurationen.
Quellverzeichnis im SuperX-Git:
SUPERX_GIT/superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update
Zielverzeichnis in der Webapp:
$WEBAPP/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update
Benötigte Dateien:
- edustore_kern_man_unload_config_ids.xml
- edustore_kern_man_unload_config_pg.xml
- edustore_kern_man_upload_config_ids.xml
- edustore_kern_man_upload_config_pg.xml
Falls diese Dateien im verwendeten Kernpaket noch fehlen, müssen sie aus dem SuperX-Git ergänzt werden.
ETL-Steuerdaten einlesen
Nach Änderungen an Kern, Modulverzeichnissen oder Jobdefinitionen müssen die ETL-Steuerdaten neu eingelesen werden.
Beispiel:
cd $WEBAPP
java -classpath "./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*" \
"de.superx.bin.ComponentAdminCLI" -r
Der Parameter -r liest die Komponenten- und Jobdefinitionen neu ein.
Alternativ kann dafür auch der entsprechende REST-Endpunkt verwendet werden:
https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb
Einzelnen Job über die CLI testen
Wenn unklar ist, ob ein Fehler in der REST-Schnittstelle oder bereits in der ETL-Konfiguration liegt, kann ein einzelner Job testweise direkt über die CLI gestartet werden.
Beispiel:
cd $WEBAPP
java -classpath "./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*" \
"de.superx.bin.ComponentAdminCLI" -e hrstage_load_and_transform
Funktioniert der Job bereits über die CLI nicht, sollten zunächst Moduldateien, Pfade, Datenbanktabellen und ETL-Konfiguration geprüft werden.
Tomcat neu starten
Nach Änderungen an Bibliotheken, Klassen, Spring-Konfigurationen oder Moduldateien sollte Tomcat neu gestartet werden.
Beispiel:
systemctl restart tomcat10
Je nach Installation kann der Dienst auch anders heißen.
REST-Schnittstelle prüfen
Nach der Einrichtung sollten zunächst einfache Listenaufrufe getestet werden:
https://demo.superx-testserver.de/superx/ds/api/etl/list
https://demo.superx-testserver.de/superx/ds/api/etl/job/list
Wenn beide Aufrufe JSON zurückliefern, ist die REST-Schnittstelle für die Komponentenverwaltung grundsätzlich erreichbar.
Für Masken kann zusätzlich ein einfacher Formularaufruf getestet werden:
https://demo.superx-testserver.de/superx/ds/api/form/71030
Fehlersuche bei der Einrichtung
Bei Problemen sollten insbesondere folgende Punkte geprüft werden:
| Problem | Prüfung |
|---|---|
| REST-Endpunkt liefert HTTP 500 | Tomcat-Log prüfen, Datenbankverbindung und Spring-Konfiguration kontrollieren. |
| Komponentenliste ist leer oder fehlerhaft | Modulverzeichnis und module_ignore.properties prüfen.
|
| Jobs fehlen | ETL-Steuerdaten mit ComponentAdminCLI -r oder über /etl/job/writeJobsToDb neu einlesen.
|
| Job funktioniert über REST nicht | Denselben Job testweise über die CLI starten und Tomcat-Log prüfen. |
| Spezialjobs fehlen | Zusätzliche ETL-XML-Dateien im Verzeichnis edustore_update prüfen.
|
| REST-Aufruf funktioniert nach einem Upgrade nicht | Bibliotheken in WEB-INF/lib sowie spring-batch.properties, hikari.properties und quartz.properties prüfen.
|
| POST auf eine Maske liefert "Required request body is missing" | Einen JSON-Body mitsenden, mindestens {}.
|
| POST liefert "application/octet-stream is not supported" | Header Content-Type: application/json setzen.
|
In einzelnen Testumgebungen kann es beim Einlesen der ETL-Steps außerdem zu Konflikten mit vorhandenen Datenbankindizes kommen. Ein solcher Eingriff sollte nur vorgenommen werden, wenn die konkrete Fehlermeldung darauf verweist.
Komponentenverwaltung und ETL
Über die ETL-Schnittstelle können Komponenten angezeigt, Jobs ermittelt und Verarbeitungsläufe gestartet oder überwacht werden.
Der Basis-Pfad lautet:
https://demo.superx-testserver.de/superx/ds/api/etl
Übersicht der wichtigsten ETL-Aufrufe
| Funktion | Methode | Beispiel | Zweck |
|---|---|---|---|
| Komponenten anzeigen | GET | https://demo.superx-testserver.de/superx/ds/api/etl/list
|
Liefert die bekannten beziehungsweise installierten SuperX-Komponenten mit technischen Informationen. |
| Installierbare Komponenten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/installables/list
|
Zeigt Komponenten, die grundsätzlich installiert werden können. |
| Alle ETL-Jobs | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/list
|
Liefert alle bekannten ETL- und Batch-Jobs. |
| Jobs einer Komponente | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/list/hrstage
|
Zeigt nur die Jobs einer bestimmten Komponente. |
| Jobdetails | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/hrstage_load_and_transform
|
Liefert technische Informationen zu einem bestimmten Job. |
| Jobdefinitionen neu einlesen | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb
|
Liest die vorhandenen Jobdefinitionen erneut in die Datenbank ein. |
| Job starten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/execute/eduetl/hrstage_load_and_transform
|
Startet einen bestimmten Job und liefert eine JobExecutionId zurück. |
| Installation starten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/install/hrstage
|
Startet die Installation einer Komponente. |
| Upgrade starten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/upgrade/hrstage
|
Startet ein Upgrade einer installierten Komponente. |
| Alle Upgrades starten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/upgrade_all
|
Startet beziehungsweise verarbeitet anstehende Upgrades mehrerer Komponenten. |
| Komponente deinstallieren | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/uninstall/hrstage
|
Startet die Deinstallation einer Komponente. |
| Unload starten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/unload/hrstage
|
Startet den Unload einer Komponente. |
| Transform starten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/transform/hrstage
|
Startet die Transformation bereits vorhandener Daten. |
| Complete starten | GET | https://demo.superx-testserver.de/superx/ds/api/etl/complete/hrstage
|
Startet modulabhängige Abschlussarbeiten. |
| Installationsfunktionen | GET | https://demo.superx-testserver.de/superx/ds/api/etl/installFunctions/hrstage
|
Zeigt zusätzliche Installationsfunktionen einer Komponente. |
| Laufende Jobs | GET | https://demo.superx-testserver.de/superx/ds/api/etl/running
|
Zeigt aktuell laufende Jobs. |
| Jobstatus | GET | https://demo.superx-testserver.de/superx/ds/api/etl/jobExecutionStatus/12345
|
Liefert den aktuellen Status einer Jobausführung. |
| Joblog | GET | https://demo.superx-testserver.de/superx/ds/api/etl/jobLog/12345
|
Liefert das Protokoll einer Jobausführung. |
| Jobausführungen | GET | https://demo.superx-testserver.de/superx/ds/api/etl/jobExecutionInfos
|
Liefert Informationen zu Jobausführungen. |
| Job stoppen | GET | https://demo.superx-testserver.de/superx/ds/api/etl/stop/12345
|
Stoppt eine bestimmte Jobausführung. |
| Job starten oder fortsetzen | GET | https://demo.superx-testserver.de/superx/ds/api/etl/start/12345
|
Spricht eine vorhandene Jobausführung erneut an. |
| Alle Jobs stoppen | GET | https://demo.superx-testserver.de/superx/ds/api/etl/job/stopAll
|
Stoppt alle laufenden Jobs. |
Typischer ETL-Ablauf
Eine Anwendung sollte die verfügbaren Jobs möglichst nicht fest hinterlegen, sondern dynamisch über die REST-Schnittstelle ermitteln.
Ein typischer Ablauf für ein Modulupdate ist:
1. Komponenten laden
/etl/list
2. Jobs des Moduls laden
/etl/job/list/hrstage
3. Gewünschten Job starten
/etl/job/execute/eduetl/hrstage_unload_load_transform
4. Jobstatus abfragen
/etl/jobExecutionStatus/12345
5. Jobprotokoll anzeigen
/etl/jobLog/12345
Der Start eines Jobs liefert normalerweise eine JobExecutionId. Diese ID wird anschließend für Status- und Logabfragen verwendet.
Spezialjobs wie beispielsweise
kern_unload_config_special
kern_upload_config_special
können ebenfalls über den generischen Execute-Endpunkt gestartet werden.
SuperX-Masken und Berichte
Auch SuperX-Masken können über die REST-Schnittstelle angesprochen werden. Dadurch lassen sich Maskendefinitionen, Eingabefelder und Ergebnisdaten unabhängig von der klassischen SuperX-Oberfläche verwenden.
Als Beispiel wird im Folgenden die Maske mit der TID 71030 verwendet.
Übersicht der wichtigsten Masken- und Berichtsaufrufe
| Funktion | Methode | Beispiel | Zweck |
|---|---|---|---|
| Maskenaufbau laden | GET | https://demo.superx-testserver.de/superx/ds/api/form/71030
|
Liefert die Eingabefelder der Maske mit Feldtypen, Defaultwerten, Auswahllisten und weiteren Eigenschaften. |
| Abhängige Felder aktualisieren | POST | https://demo.superx-testserver.de/superx/ds/api/form/71030/inputupdate
|
Berechnet abhängige Maskenfelder nach Änderung eines Eingabefeldes neu. |
| Informationen zur Maske | GET | https://demo.superx-testserver.de/superx/ds/api/report?tid=71030
|
Liefert Metadaten der Maske wie TID, Name, Beschreibung und Sachgebiet. |
| Maske ausführen | POST | https://demo.superx-testserver.de/superx/ds/api/report?tid=71030
|
Führt die Maske aus und liefert die Ergebnistabelle als JSON. |
| Ergebnis-Stylesheets | GET | https://demo.superx-testserver.de/superx/ds/api/report/stylesheets?tid=71030
|
Zeigt die für die Maske verfügbaren Ergebnis-Stylesheets. |
| Sichten eines Feldes | GET | https://demo.superx-testserver.de/superx/ds/api/report/views?tid=71030&fieldName=Institution
|
Liefert die verfügbaren Sichten beziehungsweise Hierarchien eines Maskenfeldes. |
| Inhalt einer Sicht | GET | https://demo.superx-testserver.de/superx/ds/api/report/view?tid=71030&fieldName=Institution&viewId=...
|
Liefert den Inhalt einer bestimmten Sicht. |
| Bericht herunterladen | POST | https://demo.superx-testserver.de/superx/ds/api/report/download?tid=71030
|
Erzeugt einen Export des Berichtsergebnisses. |
| Themenbaum | GET | https://demo.superx-testserver.de/superx/ds/api/menu/tree
|
Liefert den für den angemeldeten Benutzer sichtbaren SuperX-Themenbaum. |
| Teil des Themenbaums | GET | https://demo.superx-testserver.de/superx/ds/api/menu?tid=71030
|
Liefert einen bestimmten Bereich des Themenbaums. |
Masken verwenden
Der Aufruf
https://demo.superx-testserver.de/superx/ds/api/form/71030
liefert unter anderem:
- Namen der Eingabefelder
- Feldtypen
- Beschriftungen
- Pflichtfelder
- Defaultwerte
- Auswahllisten
- Baum- beziehungsweise TreeSelect-Inhalte
- verfügbare Stylesheets
Damit kann eine eigene Oberfläche die Eingabemaske dynamisch aufbauen.
Zum eigentlichen Ausführen einer Maske wird der Report-Endpunkt mit HTTP POST verwendet:
POST https://demo.superx-testserver.de/superx/ds/api/report?tid=71030
Der Request benötigt:
Content-Type: application/json
Auch wenn keine Maskenparameter gesetzt werden sollen, muss ein gültiger JSON-Body mitgegeben werden:
{}
Sollen Felder gesetzt werden, werden diese über den JSON-Body übergeben.
Beispiel:
{
"Kennung": "admin",
"Gruppe": "",
"Name": "",
"Institution": ""
}
Die Antwort enthält die Ergebnistabelle als JSON.
POST-Aufruf im Browser testen
GET-Aufrufe können direkt über die Adresszeile des Browsers getestet werden.
Für POST-Aufrufe kann beispielsweise in Firefox die Netzwerkanalyse verwendet werden:
- Entwicklertools mit F12 öffnen.
- Netzwerkanalyse auswählen.
- Einen REST-Aufruf markieren und Bearbeiten und erneut senden auswählen.
- Methode von GET auf POST ändern.
- Header ergänzen:
Content-Type: application/json
- Unter Inhalt mindestens folgenden JSON-Body eintragen:
{}
- Anfrage senden.
Ein korrekt übertragener leerer JSON-Body führt beispielsweise zu:
Content-Type: application/json
Content-Length: 2
Typische Fehler:
| Fehler | Ursache | Lösung |
|---|---|---|
Required request body is missing
|
Der POST-Request enthält keinen Body. | Mindestens {} als Inhalt mitsenden.
|
Content-Type 'application/octet-stream' is not supported
|
Der Body wird ohne passenden Content-Type übertragen. | Content-Type: application/json setzen.
|
Hinweise zur Verwendung
REST-Endpunkte können abhängig von ihrer Funktion Daten verändern oder umfangreiche Verarbeitungsläufe starten. Insbesondere Installation, Upgrade, Deinstallation und ETL-Jobs sollten daher nur für entsprechend berechtigte Benutzer verfügbar sein.
Für eigene Weboberflächen empfiehlt es sich, Komponenten, Jobs und Masken dynamisch über die REST-Schnittstelle zu ermitteln. Dadurch müssen neue Module, Spezialjobs oder zusätzliche Masken nicht fest in der Oberfläche hinterlegt werden.
Für die Komponentenverwaltung sind insbesondere die Kombinationen aus
/etl/list
/etl/job/list/{component}
und für Masken
/form/{tid}
/report?tid={tid}
relevant.