REST-SchnittstelleREST steht für Representational State Transfer und stellt eine Schnittstelle für Konfiguration, Statusabfrage und Ausführung manueller Aktionen des Routers über das HTTP- und HTTPS-Protokoll zur Verfügung. Folgende Befehle (HTTP-Methoden) stehen zum Bearbeiten der Ressourcen (Parameter bzw. Einträge) zur Verfügung:
In diesem Configuration Guide ist der Umgang mit der REST-Schnittstelle ausführlich beschrieben. Dokumentation der REST APIDie REST API (Programmierschnittstelle) ist in einer JSON-Datei gemäß der OpenAPI-Spezifikation 3.0 dokumentiert. Die Datei kann im Menü Administration auf der Seite Web-/REST-Interface heruntergeladen werden. Sie enthält sämtliche Befehle, die in den verschiedenen Konfigurationen und Ausstattungsvarianten des Routers verfügbar sind. Nicht alle enthaltenen Befehle werden von Ihrem Router unterstützt. SyntaxDie Syntax der verfügbaren Befehle lässt sich leicht über die REST API-Dokumentationsdatei ermitteln, indem diese mit einem OpenAPI-Werkzeug, wie Swagger oder Postman, geöffnet wird.
Siehe dazu die Seite Befehlsreferenz. Aktivieren der REST-SchnittstelleMit der aktuellen Version der Firmware ist der Zugriff auf die REST-Schnittstelle des Routers über HTTPS standardmäßig aktiviert. Bevor ein Zugriff auf die REST-Schnittstelle über HTTP möglich ist, muss dies im Menü Administration auf der Seite Web/-REST-Interface entsprechend konfiguriert werden. Dazu muss der Zugang über HTTP zusätzlich aktiviert werden. Die Standard-Ports (80 für HTTP und 443 für HTTPS) können angepasst werden. Das unverschlüsselte HTTP-Protokoll sollte nur verwendet werden, wenn die Verbindung anderweitig verschlüsselt ist, z.B. durch ein VPN. Bei aktiver Firewall muss die entsprechende Ausnahmeregel für den HTTP-Zugang aktiviert sein. Werden die Standard-Ports geändert, müssen auch die Ausnahmeregeln entsprechend angepasst werden. AuthentifizierungDie Authentifizierung erfolgt über Access- und Refresh-Tokens.
Zum Erhalt der Tokens muss ein Post-Request gestellt werden, bei dem die Authentifizierung über eine Benutzername/Passwort-Kombination erfolgt, die im Menü Administration auf der Seite Benutzer verwaltet wird.
Mit dem daraufhin erhaltenen Access-Token wird die weitere Kommunikation über die REST-Schnittstelle authentifiziert. Beispiel für die Anfrage zum Erhalt der Tokens: Im Body der Anfrage werden Benutzername (hier insys) und Passwort (hier icom) übergeben. { Darauf sind folgende Antworten möglich: Beispiel für die Anfrage zum Erneuern der Tokens: Darauf sind folgende Antworten möglich: Beispiel für die Anfrage zum Abmelden von der Sitzung: Darauf sind folgende Antworten möglich: AdressierungDie Adressierung erfolgt über die IP-Adresse des routers, den Port für den REST-Zugriff und den Pfad zu den Parametern.
Der Pfad zu den Parametern ist hier genauso in Sektionen strukturiert wie im CLI.
Die Adressierung für die Parameter der REST-Schnittstelle in einem Router mit der IP-Adresse 192.168.1.1 und den HTTPS-Port ist zum Beispiel: Response-Codes (Antwortcodes)Sämtliche REST-Befehle werden mit HTTP-Statuscodes beantwortet. Für die hier beschriebenen Parameter werden folgende Codes bei einer erfolgreichen Übermittlung des REST-Befehls zurückgegeben:
KonfigurationZum Auslesen oder Ändern der Konfiguration stehen die Befehle (HTTP-Methoden) GET, POST, PUT und DELETE zur Verfügung. Für Konfigurationsparameter beginnt der Pfad immer mit /configuration/. Auslesen von Parametern (GET)Parameter werden mit der HTTP-Methode GET ausgelesen. Beispiel für das Auslesen der Parameter des Web-/REST-Interface: Als Antwort werden sämtliche Parameter mit ihrer Einstellung im JSON-Format zurückgegeben: Der erste Abschnitt der Antwort referenziert das Profil, der zweite die Konfiguration mit den einzelnen Parametern. Spezifizieren des Profils im GET-BefehlOhne eine Angabe bezieht sich der GET-Befehl immer auf das laufende Profil. Sollen die Parameter eines anderen Profils ausgelesen werden, muss der Befehl um die Angabe des Namens des Profils ergänzt werden. Beispiel für das Auslesen der Benutzer von Profil "Profile_2": Als Antwort werden sämtliche Benutzer von Profil "Profile_2" im JSON-Format zurückgegeben: Filtern einer Liste im GET-BefehlBei Listen gibt ein GET-Befehl sämtliche Einträge zurück. Um nur die gewünschten Einträge in der Antwort zu sehen, kann der Befehl mit einem Filter übergeben werden. Für den Filter wird der Parameter, nach dem gefiltert werden soll, ein Operator für die Filterfunktion und der gewünschte Wert des Parameters in einem JSON-Array angegeben: { Der Parameter ist einer der Konfigurationsparameter im Listeneintrag. Beispiel für das Ausgeben aller Benutzer mit der Berechtigung "Lesen": Als Antwort werden die Parameter sämtlicher Benutzer mit der Berechtigung "Lesen" im JSON-Format zurückgegeben: Es sind auch mehrfache Filter möglich. Dann werden sämtliche Filter mit einem logischen UND kombiniert, d.h. alle Filterkriterien müssen erfüllt werden, damit ein Eintrag angezeigt wird. Beispiel für das Ausgeben aller Benutzer mit der Berechtigung "Lesen" und dem String "ic" im Benutzernamen: Abfrage der Anzahl der Listeneinträge mit dem GET-BefehlUm die Anzahl der Einträge einer Liste abzufragen, wird der Befehl um den Parameter return_size ergänzt, wobei mit dem Parameter ein Wert übergeben muss, der allerdings irrelevant ist. Beispiel für das Ausgeben der Anzahl der angelegten Benutzer: Als Antwort wird die Anzahl der Benutzer im JSON-Format zurückgegeben: Wird dabei ein Filter mit übergeben, wird nur die Anzahl der Listeneinträge ausgegeben, welche den Filterkriterien entsprechen. Beispiel für das Ausgeben der Anzahl der angelegten Benutzer mit der Berechtigung "Lesen" und dem String "ic" im Benutzernamen: Hinzufügen von Parametern (POST)Mit der HTTP-Methode POST werden Einträge zu Listen hinzugefügt. Dabei darf der Eintrag keinen Listenindex haben, da der Eintrag am Ende der Liste hinzugefügt wird. Beispiel für das Hinzufügen des neuen Benutzers "newuser" mit Leserechten zum Profil "Profile" und gleichzeitiger Aktivierung des geänderten Profils: { Obiges Beispiel fügt den neuen Benutzer dem Profil "Profile" hinzu. Der Parameter "name": "Profile" spezifiziert das Profil, auf das die Änderungen Anwendung finden. Wird er weggelassen, wird der Benutzer dem laufenden Profil hinzugefügt. Der Parameter "activate": "1" aktiviert das geänderte Profil. Wird er weggelassen, wird das Profil lediglich geändert, aber nicht aktiviert. Sollen Änderungen auf das laufende Profil Anwendung finden und soll keine Aktivierung stattfinden, kann der gesamte Profil-Abschnitt weggelassen werden. Manche Funktionen des Routers erfordern Listen innerhalb von Listen. Beispiel für das Hinzufügen eines neuen Interfaces "net3" mit einem Verbindungs-Check-Intervall von 13 Minuten und der Fallback-WAN-Kette "wan2" zur WAN-Kette "wan1": { Ändern von Parametern (PUT)Mit der HTTP-Methode PUT werden bestehende Einträge in Listen geändert. Beim Ändern bestehender Einträger wird der Eintrag über die Listen-ID (list_uid) bzw. Sublisten-ID (sublist_uid) identifiziert. Dazu muss zuvor mit einem GET-Request die bestehende Konfiguration abgefragt werden, um die ID zu ermitteln. Beispiel für das Ändern des Benutzernamens des Benutzers mit der Listen-ID "878256c625" auf "newuser" und der Rechte auf Lesen/Schreiben: { Der Listen-Identifikator, hier der Parameter "index" ist zwingend erforderlich zur Bestimmung des zu ändernden Eintrags. Löschen von Parametern (DELETE)Mit der HTTP-Methode DELETE werden komplette Listen oder bestehende Einträge aus Listen gelöscht. Werden keine Filter verwendet, werden alle Einträge löscht. Filter ermöglichen ein gezieltes Löschen bestimmter Einträge. Beispiel für das Löschen aller Hostnamen: Beispiel für das Löschen aller Benutzer mit dem String "test" im Benutzernamen aus dem Profil "Profile_2": Beispiel für das Löschen aller WAN-Interfaces: Beispiel für das Löschen des Interfaces "group2" aus den WAN-Ketten: Schema-AbfragenZum Abfragen eines Konfigurationsschemas inklusive aller möglichen Werte steht der Befehl (HTTP-Methode) GET mit der Option "?append_scheme=1" zur Verfügung. Dabei werden sämtliche für eine Ressource möglichen und erlaubten Felder und Optionen ausgegeben Beispiel für die Ausgabe des Schemas für die Konfiguration des E-Mail-Kontos: Als Antwort werden sämtliche Konfigurationsoptionen im JSON-Format zurückgegeben: Status-AbfragenZum Abfragen von Statusinformationen steht der Befehl (HTTP-Methode) GET zur Verfügung. Für Abfragen von Statusinformationen beginnt der Pfad immer mit /status/. Beispiel für das Auslesen der aktuellen Werte der Geräteinfo: Als Antwort werden sämtliche Parameter mit ihren Werten im JSON-Format zurückgegeben: Anzeigen von Log-Dateien und ProfilenZum Anzeigen von Log-Dateien und Profilen steht der Befehl (HTTP-Methode) GET zur Verfügung. Für die Anzeige von Log-Dateien und Profilen beginnt der Pfad immer mit /download/. Log-DateienEine Übersicht aller im Router gespeicherten Log-Dateien erhält man durch einen GET-Aufruf der Log-Datei-Liste: { Die Anzeige einer Log-Datei erhält man durch einen GET-Aufruf der jeweiligen Datei:
2018-04-19 07:44:46 [configd] Started ProfileEine Übersicht aller im Router gespeicherten Profile erhält man durch einen GET-Aufruf der Profile-Liste: { Die Anzeige eines Profils erhält man durch einen GET-Aufruf des jeweiligen Profils: Debugging und Auslösen manueller AktionenZum Debugging und Auslösen manueller Aktionen steht der Befehl (HTTP-Methode) POST zur Verfügung. Für das Debugging und Auslösen manueller Aktionen beginnt der Pfad immer mit /operation/. Für Debugging-Zwecke ist es möglich, manuelle Aktionen auszuführen. Beispiel für das manuelle Versenden der Nachricht "message1": { Beispiel für das manuelle Einschalten der Info-LED: { Siehe dazu auch dieses Beispiel für die Vorgehensweise zum Ermitteln der Befehls-Syntax. Beispiel für eine Abfrage der Konfiguration mit einem cURL-BefehlMit folgendem cURL-Befehl kann beispielsweise die Konfiguration des Web-/REST-Interface im Menü Administration ausgelesen werden: { Zum Ermitteln der cURL-Syntax, siehe die Seite Befehlsreferenz und den dort verlinkten Configuration Guide. Tipp: Bei Problemen mit der cURL-Syntax ist es hilfreich, die Option '-v' (verbose) zu verwenden, um die Fehlersuche zu vereinfachen: |