Anleitungen & Tutorials
Mit der SQL-API der App Datenbank-Interface kannst du SQL-Befehle extern ausführen, um Daten aus tricoma auszulesen, einzutragen, zu aktualisieren oder sogar zu löschen.
ACHTUNG: Dieses Tutorial richtet sich an Entwickler bzw. Techniker, die mindestens REST-API- und SQL-Grundkenntnisse besitzen.
Um diese Funktion nutzen zu können, musst du zuerst in den Allgemeinen Einstellungen die Option SQL-API aktivieren einschalten.
Ist der Haken gesetzt, kannst du optional mehrere IP-Adressen kommagetrennt angeben, die auf die API zugreifen dürfen. Damit lässt sich der Zugriff bereits im Voraus einschränken.
Beim Timeframe gibst du an, wie weit der übergebene Timestamp im Header (X-tricoma-API-Timestamp) maximal von der Serverzeit abweichen darf (+/-). Der Standardwert beträgt 120 Minuten.
Im nächsten Schritt musst du ein Zugriffskonto anlegen. Wechsle dazu in den Reiter Einstellungen » API-Zugriffskonten. Sobald das Konto angelegt ist, hinterlegst du dort ein Passwort, das später für das Erstellen eines Tokens benötigt wird (siehe Punkt 1 im Screenshot).
Für jedes Konto kannst du separat festlegen, welche SQL-Statements über diesen Zugang ausgeführt werden dürfen. Die Statements kannst du direkt in dieser Oberfläche aktivieren (siehe Punkt 2 im Screenshot).
Über Details kannst du zusätzlich festlegen, auf welche Tabellen einer App per API zugegriffen werden darf. So kannst du beispielsweise den Zugriff auf alle Tabellen der App Rechnungen generell verhindern.
Die API kann per cURL angesteuert werden. Ein Beispiel-Quellcode in PHP kann hier heruntergeladen werden – vorausgesetzt, du hast die App bereits erworben.
Folgende Parameter müssen in der aktuellen API v1 angegeben werden:
| Name: | Wert: |
|---|---|
| Accept: | application/vnd.tricoma.v1+json |
| Content-Type: | application/json |
| X-tricoma-API-Version: | z. B.: 1.0 |
| X-tricoma-API-ID: | ID des Zugriffskontos |
| X-tricoma-API-Timestamp: | aktueller Unix-Timestamp / Zeitstempel |
| X-tricoma-API-Auth: | der Token (siehe Beispiel-Quellcode) |
Hier wird der Befehl als JSON-Repräsentation eines Arrays übergeben.
Das Array kann zum Beispiel wie folgt aufgebaut sein:
Als erster Wert wird der Index statement angegeben. Folgende Werte sind möglich:
| s | SELECT |
| i | INSERT |
| u | UPDATE |
| d | DELETE |
Je nachdem, ob das im Header verwendete Zugriffskonto das jeweilige Statement ausführen darf, wird die Anfrage verarbeitet oder verworfen.
Verschiedene Statements benötigen unterschiedliche Parameter. Die grundsätzliche Logik ist jedoch immer gleich.
| Name: | Pflicht: | Beschreibung: |
|---|---|---|
| select | x | Hier gibst du die zu selektierenden Spalten an. Möglich sind Wildcards (*), einzelne Spalten inkl. Alias und mathematische Funktionen. |
| from | x | Hier werden die Tabellen angegeben, aus denen die Daten selektiert werden sollen. 1 |
| joins | Hier können JOINS definiert werden. 1 | |
| where | Hier werden die WHERE-Bedingungen definiert. | |
| group | Hier kann die GROUP BY-Anweisung gesetzt werden. | |
| having | Hier kann die HAVING-Anweisung definiert werden. | |
| order | Hier kann die Sortierung definiert werden. | |
| limit | Hier können die Parameter für LIMIT definiert werden. |
| Name: | Pflicht: | Beschreibung: |
|---|---|---|
| table | x | Hier wird die Tabelle angegeben, in die der INSERT ausgeführt werden soll. 1 |
| set | x | Hier werden die Spalten inkl. Werte angegeben. |
| Name: | Pflicht: | Beschreibung: |
|---|---|---|
| table | x | Hier wird die Tabelle angegeben, auf die der UPDATE ausgeführt werden soll. 1 |
| set | x | Hier werden die Spalten inkl. Werte definiert. |
| where | Hier werden die WHERE-Bedingungen gesetzt. |
| Name: | Pflicht: | Beschreibung: |
|---|---|---|
| table | x | Hier wird die Tabelle angegeben, aus der gelöscht werden soll. 1 |
| where | x | Hier werden die WHERE-Bedingungen angegeben. |
1 ACHTUNG: Wenn eine Tabelle verwendet wird, für die das Zugriffskonto keine Freigabe besitzt, wird die Anfrage verworfen.
Im Array dieses Indexes wird im Key die Datenbankspalte und im Value der Alias angegeben. Wenn du keinen Alias benötigst, kann der Value leer bleiben. Im Fall von JOINS solltest du darauf achten, bei den zu selektierenden Feldern die Tabelle als Präfix mit anzugeben.
Auch Aggregats- bzw. Rechenfunktionen sind teilweise möglich.
Beispiel:
Ergibt folgenden SQL-Befehl:
Im Array dieses Indexes wird als Value der Tabellenname angegeben.
Beispiel:
Im Array dieses Indexes wird im Key der JOIN-Typ und im Value ein weiteres Array mit den Anweisungen angegeben.
Folgende JOIN-Typen sind möglich:
| l | LEFT JOIN |
| r | RIGHT JOIN |
| i | INNER JOIN |
Werden mehrere JOINS desselben Typs benötigt, kann ein numerischer Suffix an den Typ angehängt werden, da mehrere identische Indexe im selben Array nicht möglich sind. Beispiel: i{1}, i{2}, i{3}.
Im JOIN-Array wird im Key die Zieltabelle angegeben und im Value die Verkettung aus zwei Werten. Der zweite Wert kann detaillierter angegeben werden, wenn nicht nur zwei Tabellenspalten mit "=" verknüpft werden sollen, sondern SQL-Funktionen oder andere Vergleichsoperatoren nötig sind.
Folgende Werte sind im zweiten Verkettungs-Array möglich:
| Name: | Beschreibung: |
|---|---|
| value | Der zu vergleichende Wert – entweder eine Tabellenspalte wie kunden.ID oder ein String wie 97. |
| operator | siehe Vergleichsoperatoren |
| function | z. B. trim, isnull |
Beispiel:
Ergibt folgenden SQL-Befehl:
| Name: | Beschreibung: |
|---|---|
| value | der zu vergleichende Wert. Entweder eine Zabellenspalte z.B. "kunden.ID" oder ein String z.B. "97" |
| operator | siehe Vergleichsoperatoren |
| function | derzeit: trim, isnull, lower, upper, md5 |
| Name: | Beschreibung: |
|---|---|
| value | der zu vergleichende Wert z.B. "42" |
| operator | siehe Vergleichsoperatoren |
| Operator: | Beschreibung: |
|---|---|
| %% | Like-Suche mit beidseitigen Wildcards: Spalte LIKE '%Wert%' |
| %_ | Like-Suche mit Wildcard am Anfang: Spalte LIKE '%Wert' |
| _% | Like-Suche mit Wildcard am Ende: Spalte LIKE 'Wert%' |
| in | IN ( ...) - Abfrage. Ist die dazugehörende Value ein Array ergit es Spalte IN ( 3.14, 42, 1337 ) ansonsten Spalte IN ( 3.14 ) |
| !in | NOT IN ( ...) - Abfrage. Funktionsweise analog zu "in" |
| = (defaultwert) | Direkter Vergleich Spalte = Wert |
| Index: | Beschreibung: | ||||||
|---|---|---|---|---|---|---|---|
| error | Im Fehlerfall wird der Index "error" mit einer entsprechenden Fehlermeldung als Value zurück geliefert. z.B: 'error' => 'Unauthorized.' |
||||||
| success | Läuft es erfolgreich durch, erhält man im Index "success" je nach Statement zwei Werte:
Das JSON könnte dann wie folgt aussehen:
|