9 Minuten Lesezeit (1831 Worte)

MySQL REST Service als Datenquelle in Oracle APEX (TEIL 1)

In der heutigen Zeit werden Daten immer wichtiger und Webapplikationen bieten Unternehmen eine Möglichkeit, diese Daten zu verwalten und zu nutzen. Oracle APEX ist eine Anwendungsplattform, die es Entwicklern ermöglicht, schnell und einfach Webapplikationen zu entwickeln. Der MySQL REST Service (MRS) ist ein Feature, welches den Zugriff auf MySQL-Datenbanken über REST-Schnittstellen erlaubt und somit eine schnelle und einfache Variante bietet, auf MySQL-Daten zuzugreifen.

Dieser Blogbeitrag ist eine zweiteilige Serie. Im ersten Teil wird die Vorbereitung auf Seiten von MySQL behandelt, einschließlich des Codes für den Aufbau der Demo-Datenbank. Es werden die einzelnen Schritte zur Konfiguration von MRS beschrieben und wie man Datenbankobjekte über REST bereitstellt. Auch das Bootstrapping und der Start des MySQL Routers werden erläutert. Im zweiten Teil wird beschrieben, wie man MRS als Datenquelle in Oracle APEX nutzen kann.

Was ist REST?

REST (Representational State Transfer) ist ein Architekturstil für verteilte Systeme, der insbesondere für Webanwendungen von Bedeutung ist. Mit REST kann auf Ressourcen über das HTTP(S)-Protokoll zugegriffen werden, was die Umsetzung von RESTful-APIs ermöglicht. Diese erlauben es Entwicklern, Daten mit HTTP(S)-Methoden abzurufen, zu erstellen, zu aktualisieren und zu löschen. Die Kommunikation zwischen Client und Server erfolgt über einheitliche Schnittstellen, die spezifische Ressourcen identifizieren und darauf basierende Operationen ausführen. RESTful-APIs zeichnen sich durch ihre Einfachheit und Skalierbarkeit aus, was sie zu einer sehr beliebten Wahl macht.

Die REST-Architektur besteht aus mehreren grundlegenden Komponenten:

1. Ressourcen: Eine Ressource ist eine eindeutig identifizierbare Entität, auf die über eine URI (Uniform Ressource Identifier) zugegriffen wird. Jede Ressource hat einen bestimmten Zustand und kann von einem Client gelesen oder manipuliert werden.

Abbildung 1: Beispiel Ressource

2. HTTP(S)-Methoden: Die RESTful-API unterstützt die HTTP(S)-Methoden GET, POST, PUT und DELETE, um auf Ressourcen zuzugreifen. Jede dieser Methoden wird für eine bestimmte Aktion verwendet:

  • GET zum Lesen von Daten.
  • POST zum Erstellen neuer Ressourcen.
  • PUT zum Aktualisieren von Ressourcen.
  • DELETE zum Löschen von Ressourcen.

3. Darstellung: Eine Darstellung ist eine Repräsentation einer Ressource in einem bestimmten Format, z. B. JSON oder XML. Eine RESTful-API ermöglicht es dem Client, die gewünschte Darstellung auszuwählen und zurückzugeben.

Abbildung 2: Beispiel einer JSON-Darstellung

4. Hypermedia: Dies ist eine Möglichkeit, Ressourcen zu verknüpfen und ihre Beziehungen zueinander zu beschreiben. Ein typisches Beispiel ist ein Link, der auf eine andere Ressource verweist. 

Abbildung 3: Beispiel Hypermedia

Im nächsten Abschnitt werden wir den MySQL REST Service im Detail betrachten und erfahren, wie man diesen zum Erstellen von REST-Schnittstellen nutzen kann. 

Was ist der MySQL REST Service (MRS)?

MRS ist ein Feature des MySQL Routers, welches den schnellen und (sicheren) Zugriff auf Daten in der MySQL-Datenbank via HTTP(S) ermöglicht. Es lässt die Veröffentlichung von RESTful Web Services zu, um mit diesen Daten zu interagieren. Die Konfiguration kann dabei über die MySQL Shell für Visual Studio Code (VS Code) erfolgen. Dies ist ein einfacher Weg, Datenbankobjekte freizugeben und zu verwalten. Alternativ kann die Einrichtung natürlich auch über Kommandos (z. B. über die MySQL Shell) erfolgen. Dies ist hilfreich, wenn solche Prozesse geskriptet und/oder automatisiert werden sollen. Der MRS ist also das MySQL-Pendant zum Oracle REST Data Service (ORDS) für Oracle-Datenbanken.

Der MySQL REST Service besteht aus mehreren Komponenten, darunter:

  • MySQL-Lösung: Hierbei kann es sich um ein MySQL Heatwave Setup (in der Cloud), einen MySQL InnoDB Cluster oder einen eigenständigen MySQL-Server handeln. In unserem Setup ist eine MySQL Single Instanz die Quelle der Daten, die in APEX genutzt bzw. eingebunden werden sollen. Eine Anleitung für die Installation von MySQL finden Sie über den folgenden Link.
  • MySQL Router: Eine oder mehrere Instanzen des MySQL Routers stellen eine REST-Schnittstelle z. B. über den Standard-Port 8443 mittels HTTPS bereit. Der MySQL Router fungiert als Proxyserver, der die Verbindungen zwischen Client-Anwendungen und dem MySQL-Server verwaltet. Er überwacht die Verbindungen und leitet Anfragen an den zugehörigen MySQL-Server weiter. Die Informationen bezüglich der Installation des MySQL Routers finden Sie hier.
  • MySQL Shell für VS Code: Mit dieser Komponente kann der MRS über eine grafische Benutzeroberfläche oder ein Terminal verwaltet werden. Die Informationen bezüglich der Installation von MySQL Shell für VS Code finden Sie hier.

Sobald die notwendigen Tools erfolgreich installiert wurden, kann der MRS über die Benutzeroberfläche von VS Code verwaltet werden. Nach dem Öffnen von VS Code erscheint die Oberfläche wie in der folgenden Abbildung dargestellt:

Abbildung 4: MySQL Shell für VS Code

Erstellung einer Datenbankverbindung

Um REST-Schnittstellen zu erstellen, ist es notwendig, eine Verbindung zu einer MySQL-Datenbank herzustellen. Sie können dafür die Datenbankverbindungsmaske in VS Code verwenden. Das Vorgehen dazu ist wie folgt:

  • Öffnen Sie die Datenbankverbindungsmaske in VS Code, indem Sie auf das Plus-Symbol über der Verbindungsliste klicken:
Abbildung 5: Erstellung einer Datenbankverbindung
  • Geben Sie die erforderlichen Informationen in der Maske ein: 
Abbildung 6: Konfiguration der Datenbankverbindung
  • Klicken Sie auf „OK“, um die Verbindung zu speichern.

Wenn die Verbindung erfolgreich hergestellt wurde, wird sie in der Liste der Verbindungen angezeigt:

Abbildung 7: Verbindungen

Erstellung einer Datenbank mit Datenbankobjekten

Um die Bereitstellung von REST-Schnittstellen im MRS zu demonstrieren, wird zunächst eine Datenbank mit dem Namen „db_demo_mrs“ erstellt. Anschließend wird eine Tabelle namens „mitarbeiter“ innerhalb dieser Datenbank angelegt und Beispiel-Datensätze in diese Tabelle eingefügt. Dieser Vorgang kann in die folgenden Schritte unterteilt werden: 

  • Um die MySQL Shell-Konsole zu öffnen, klicken Sie mit der rechten Maustaste auf die zuvor hergestellte Datenbankverbindung und wählen Sie „Open New MySQL Shell Console for this Connection“.
Abbildung 8: MySQL Shell Konsole
  • Geben Sie folgenden Befehl in die Konsole ein und bestätigen Sie mittels Eingabetaste, um in den SQL-Modus zu wechseln: \sql
  • Erstellung der Datenbank:
    CREATE DATABASE db_demo_mrs;
  • Setzen Sie das Standardschema:
    USE db_demo_mrs;
  • Tabelle „Mitarbeiter“ erstellen:
CREATE TABLE mitarbeiter 
     ( mitarbeiternr SMALLINT(4),
       mitarbeitername varchar(12),
      beruf varchar(22),
      vorgesetzter SMALLINT(4),
      eintrittsdatum DATE,
      gehalt DECIMAL(9,2) NOT NULL,
      provision DECIMAL(9,2),
      abteilungsnr SMALLINT(2)
     ); 
  •  Daten in die Tabelle „Mitarbeiter“ einfügen:
INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 1, 'Dr. Klose', NULL, 99000.00, 1, CURDATE() - INTERVAL 700 DAY,'Projektleiter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 11, 'Pumuckl', 1, 33000.00, 12, CURDATE() - INTERVAL - 680 DAY,'Projektassistent');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 12, 'Gruber', 1, 68000.00, 11, CURDATE() - INTERVAL - 550 DAY,'Projektleiter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 13, 'Joschko', 1, 65000.00, 31, CURDATE() - INTERVAL - 440 DAY,'Projektleiter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 14, 'Zeitz', 1, 66500.00, 32, CURDATE() - INTERVAL - 410 DAY,'Projektleiter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 15, 'Martin', 1, 70000.00, 21, CURDATE() - INTERVAL - 320 DAY,'Projektleiter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 16, 'Stephan', 1, 70000.00, 22, CURDATE() - INTERVAL - 210 DAY,'Projektleiter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 111, 'Schnier', 16, 50000.00, 22, CURDATE() - INTERVAL - 150 DAY,'Vertriebsbeauftragter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 112, 'Mattia', 12, 50000.00, 21, CURDATE() - INTERVAL - 120 DAY,'Projektleiter');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 113, 'Schlamann', 13, 20000.00, 31, CURDATE() - INTERVAL - 40 DAY,'Projektassistent');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf) 
VALUES ( 114, 'Dechant', 14, 19000.00, 22, CURDATE() - INTERVAL - 30 DAY,'Schreibkraft');

INSERT INTO mitarbeiter (mitarbeiternr, mitarbeitername, vorgesetzter, gehalt, abteilungsnr, eintrittsdatum, beruf)
VALUES ( 115, 'Dunkel', 14, 19000.00, 31, CURDATE() - INTERVAL - 23 DAY,'Projektleiter');

COMMIT;
 

Nachdem die Tabelle „Mitarbeiter“ erstellt wurde, können Sie die Tabelle in der Datenbankverbindungsstruktur auswählen und auf „Daten anzeigen“ klicken, um die Daten darzustellen: 

Abbildung 9: Daten von Mitarbeiter-Tabelle anzeigen

Bereitstellung der Mitarbeiter-Tabelle über die REST-Schnittstelle

Konfigurieren Sie die Instanz für die Unterstützung von MySQL Rest Service:

  • GUI
Abbildung 10: Instanz für MRS konfigurieren
  • Terminal

        □  Führen Sie den folgenden Befehl aus, um in den Javascript-Modus zu wechseln: /js

        □  Instance konfigurieren: mrs.configure()

REST-Service hinzufügen:

  • GUI
Abbildung 11: Rest-Service hinzufügen
  • Terminal – Add Rest Service: mrs.add.service()

Datenbankobjekt zum REST-Service hinzufügen:

  • GUI
Abbildung 12: Datenbankobjekt zum REST-Service hinzufügen
  • Terminal: mrs.add.schema() 

Bootstrapping und Starten des MySQL Routers: Klicken Sie mit der rechten Maustaste auf das MRS-Element im Baum. Wählen Sie „Start Local MySQL Router Instance“.

Abbildung 13: Bootstrapping und Starten des MySQL Routers

Das Bootstrapping vom MySQL Router ist ein Prozess, bei dem die mysqlrouter.conf-Datei automatisch anhand der Metadaten konfiguriert wird. Der Bootstrap-Prozess startet das übliche Routing nicht, sondern konfiguriert stattdessen die Routing-Verbindungen zu den Serverinstanzen. Nach dem Bootstrap-Prozess können Client-Anwendungen, über die von MySQL Router veröffentlichten Ports eine Verbindung herstellen, und es leitet automatisch Client-Verbindungen an die Instanzen weiter, basierend auf dem eingehenden Port.

Wenn der Bootstrap-Prozess zuvor nicht abgeschlossen wurde, wird er automatisch gestartet. Geben Sie bei Aufforderung das Passwort für die DB-Verbindung und ein zufälliges JSON-Web Token (JWT)-Secret ein. Beachten Sie, dass dieses JWT-Geheimnis für alle MySQL Router-Instanzen gleich sein muss, wenn Sie mehrere Router für dieselbe MySQL-Lösung bereitstellen. Sobald der MySQL Router gestartet ist, können die Debug-Ausgaben im VS Code-Terminal angezeigt werden.

Überblick über Mitarbeiter Schnittstelle

In dem vorherigen Kapitel wurde die Tabelle „mitarbeiter“ über REST bereitgestellt. Jetzt wollen wir uns ansehen, wie die Schnittstelle aussieht.

Die Schnittstelle sieht wie folgt aus: https://host:8443/api/db_demo_mrs/mitarbeiter

  • HTTP/HTTPS: Die Schnittstelle kann entweder über HTTP oder HTTPS erreicht werden, wobei HTTPS das bevorzugte Protokoll ist.
  • Host: Dies ist der Hostname oder die IP-Adresse des Servers, auf dem der MRS installiert ist.
  • 8443: Dies ist der Standard-Port.
  • api: Dies ist der Rest Service Pfad, den Sie über die MySQL Shell erstellt haben.
  • db_demo_mrs: Dies ist der Rest Schema Pfad.
  • mitarbeiter: Dies ist der Rest Objekt Pfad.

Die Schnittstelle Operationen sind:

  • GET /mitarbeiter: Gibt alle Mitarbeiter zurück.
  • GET /mitarbeiter/:mitarbeiternr: Gibt anhand der Mitarbeiternummer einen bestimmten Mitarbeiter zurück.
  • PUT /mitarbeiter/:mitarbeiternr: Aktualisiert den Mitarbeiterdatensatz anhand der Mitarbeiternummer.
  • POST /mitarbeiter: Ein neuer Mitarbeiter wird angelegt.
  • DEL /mitarbeiter?q={"mitarbeiternr": mitarbeiternr }: Ein Mitarbeiter wird anhand der Mitarbeiternummer gelöscht.

Mitarbeiternr ist eine URL Pattern Variable.

Fazit

Zusammenfassend lässt sich sagen, dass der erste Teil dieser Blog-Serie einen ausführlichen Leitfaden zur Vorbereitung von MySQL für die Verwendung mit MRS bietet. Die Schritte zur Erstellung einer Demo-Datenbank, zur Konfiguration von MRS und zur Bereitstellung von Datenbankobjekten über REST werden leicht verständlich erläutert. Auch das Bootstrapping und der Start des MySQL Routers werden einfach und schnell durchgeführt. Durch das Befolgen dieser Schritte können Oracle APEX-Benutzer nun auf MySQL-Datenbanken zugreifen und die Funktionalität ihrer Anwendungen erweitern. Im zweiten Teil dieser Serie wird erläutert, wie MRS als Datenquelle in Oracle APEX genutzt werden kann. 

Seminarempfehlung

hat noch keine Informationen über sich angegeben
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Dienstag, 23. April 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie