In einer serviceorientierten Struktur müssen Organisationen oft anderen Services oder Abteilungen erlauben, die Daten in der Datenbank kontrolliert zu lesen. Es empfiehlt sich, die Daten als Service oder REST-API offenzulegen, statt direkten Zugriff auf die Datenbank zu gewähren. Wenn Daten als Service / API bereitgestellt werden, kann der Zugriff auf Services problemlos kontrolliert werden. Der WSO2 Enterprise Integrator (EI) unterstützt die Bereitstellung von Daten als Service für viele Datenspeicher sofort nach der Installation.
Wenn Daten als Service / API zur Verfügung gestellt werden, kann es erforderlich sein, eine Filter- / Such-API mit Filteroptionen bereitzustellen, um Performance-Probleme zu vermeiden. In diesem Beitrag erfahren Sie, wie Sie die in einer MySQL-Datenbank gespeicherten Daten als Such-API mit Filteroptionen bereitstellen können.
Wann ist dies nötig?
Das Offenlegen von in einer Datenbank gespeicherten Daten als REST-API und die REST-API sollte die Möglichkeit bieten, Daten basierend auf Spalten der Tabelle zu filtern. Hierbei wird nur die „AND“-Verknüpfung zur Filterung berücksichtigt. Der folgende Such-/Filter-API-Aufruf sollte zum Beispiel die SQL query in der entsprechenden Datenbanktabelle durchführen und das Ergebnis anzeigen:
REST API call: /context/resourcepath?query1=”value”& query 2”=value”…. ”& query-n”=value”
SQL Query: SELECT * FROM TABLE WHERE COLUMN1=”VALUE” AND COLUMN2=”VALUE”….AND COLUMNn=”VALUE”
Was ist die Lösung?
Der WSO2 Enterprise Integrator (EI) verfügt über eine Datenservice-Funktion, mit der die in der Datenbank gespeicherten Daten als Service bereitgestellt werden können. Sie können einen Datendienst erstellen, der eine Dynamic SQL query als Eingabe akzeptiert. Diese Funktion kann zum Filtern der Daten basierend auf verschiedenen Spaltenattributwerten verwendet werden.
Es ist jedoch gefährlich, diesen Datendienst direkt für Außenstehende zugänglich zu machen, da er SQL-Injection ausgesetzt ist. Deshalb sollte der Datenservice für Außenstehende auf kontrollierte Weise zugänglich gemacht werden, wobei die Eingabe an den Datenservice vor dem Aufruf des Services validiert werden sollte. Dies kann erreicht werden, indem eine REST-API in WSO2 EI erstellt wird, die als Proxy für den Datendienst fungiert. Die an die REST-API gerichteten Anfragen werden zunächst validiert, dann wird aus den gültigen Anfrageparametern eine dynamische Abfrage für den Datenservice erstellt und der Datenservice wird aufgerufen.
Wenn der Datenservice weiterhin über den lokalen Transport und der Zugriff von der REST-API über den lokalen Transport erfolgt, ist der Datenservice vor jeglichen Angriffen geschützt. In diesem Blogbeitrag wird nur die funktionale Anforderung und ihre Umsetzung erläutert. Mehr Details zur Verwendung des lokalen Transports finden Sie in der WSO2-Dokumentation.
Zum Ausführen des Beispiels in diesem WSO2-Tutorial müssen die folgenden Voraussetzungen gegeben sein:
- WSO2 EI
- MySQL Database
- MySQL Driver
- WSO2 Integration Studio
Einrichten von WSO2 Enterprise Integrator & Datenbank
- Laden Sie den MySQL-Treiber herunter und kopieren Sie ihn nach <EI_HOME>/lib
- Lassen Sie uns eine Datenbank erstellen, um die Details der Geschäftsstelle einer Firma zu speichern. Fügen Sie einige Beispieldaten ein.
API / Service zum Abfragen von Daten erstellen
- Erstellen Sie die folgenden Projekte im Integration Studio:
- ESB Project (FilterAPI-ESB) – Enthält ESB Artifacts
- Data Service Project ( FilterAPI-DS) – Enthält Data Service Artifact
- Data Source Project ( FilterAPI-DataSource) – enthält Data Source Artifact
- Composite Carbon Application (FilterAPI-CAPP) – Enthält die bereitzustellenden Artifacts
- Erstellen Sie eine Datenquelle, um die Datenbank zu verbinden:
- Rechtsklick auf FilterAPI-DataSource > New > Data Source
- Wechseln Sie in die Quellansicht und konfigurieren Sie die Datenquelle
- Erstellen Sie einen Datenservice mit dynamic query als Eingabe
- Rechtsklick auf FilterAPI-DS > New > Data Service
- Wählen Sie den Datenquellentyp „Carbon Data Source“ und wählen Sie den im vorherigen Schritt erstellten Datenquellennamen.
- Sobald die Servicedatei erstellt ist, schalten Sie auf die Quellansicht um und erstellen den Service, um die Tabelle mit Hilfe der dynamischen Abfrage abzufragen. Der folgende Service enthält folgende Schritte.
- Datenquelle definieren
- Abfrage definieren, um Office-Details zu erhalten
2.1. SQL definieren, um Office-Details zu erhalten
2.2. Zuordnung der Eingabeparameter definieren
2.3. Mapping der Ausgabe-Parameter definieren
3. Operation definieren
3.1 Die QueryID auswählen, um die Operation abzubilden
3.1 Die QueryID auswählen, um die Operation abzubilden
Hinweis: Setzen Sie im Input-Mapping sqlType. Value als QUERY_STRING für filterQuery. Hier ist filterQuery eine SQL-Anweisung mit WHERE-Klausel. Z. B. WHERE OfficeCode=1
- Datendienste mit dynamischer Filter-SQL-Abfrage testen
- Wählen Sie die Datenquelle und den Datendienst aus, die in der Composite Carbon Application (FilterAPI-CAPP) erstellt wurden, und erstellen Sie die Car Application.
- Stellen Sie die Car Application auf dem WSO2 EI Server bereit
- Suchen Sie den bereitgestellten Service unter dem Abschnitt Services und wählen Sie die Option Try this Service
- Versehen Sie nun den Parameter filterQuery mit einer WHERE-Klausel-Anweisung. Zum Beispiel: „WHERE officecode=1′. Der Dienst filtert die Daten basierend auf der Bedingung in der WHERE-Klausel und gibt die Antwort zurück.
Jetzt haben wir einen Service, der eine SQL-Wo-Klausel-Bedingung akzeptiert und die Daten auf der Basis dieser Bedingung filtert.
- REST-API erstellen – Der im vorherigen Schritt erstellte Dienst unterliegt der SQL-Injection, da der Aufrufer eine beliebige SQL-Anweisung an den Eingabeparameter übergeben kann. Deshalb müssen wir sicherstellen, dass dieser Service nicht für Außenstehende oder nicht vertrauenswürdige Clients zugänglich ist. Um den Service für Außenstehende zugänglich zu machen, muss dieser Service über eine gesicherte API zugänglich gemacht werden. Die API sollte Spaltenwerte als Abfrageparameter akzeptieren und die Parameter sollten auf SQL-Injektion validiert werden. Der Service wird die dynamische WHERE-Klausel basierend auf den gültigen Parametern konstruieren, die er erhält.
- Klicken Sie mit der rechten Maustaste auf FilterAPI-ESB -> Neu -> Rest-API
- Geben Sie der API einen Namen und einen Kontext
- Erstellen Sie die Logik, um die Abfrageparameter zu validieren, die dynamische Where-Klausel zu konstruieren, die Payload des Datenservices mit den konstruierten Eingabeparametern zu erstellen, den Datenservice aufzurufen, die Nachricht in JSON zu transformieren und an den Aufrufer zurückzugeben.
Hinweis: In der obigen API werden nur zwei Tabellenspalten für die Filterung berücksichtigt und sie werden auf Abfrageparameter abgebildet. Dies lässt sich auf eine beliebige Anzahl von Spalten erweitern.
Table Column | Query Param |
OfficeCode | code |
City | city |
In der obigen API ist keine Validierungslogik hinzugefügt worden. Die Überprüfung kann vor dem Konstruieren der dynamischen Abfrage hinzugefügt werden. Falls die Validierung fehlschlägt, kann eine Fehlermeldung an den Aufrufer zurückgegeben werden.
- Testen Sie die REST-API
- Wählen Sie alle Elemente der zusammengesetzten Anwendung aus und erstellen Sie die .car-Datei.
- Stellen Sie die .car-Datei in WSO2 EI bereit.
- Rufen Sie die API mit verschiedenen dynamischen Abfrageparametern auf, um die Daten zu filtern. Zum Beispiel:
- Hole Büros nach Städtename: GET http://localhost:8280/office?city=Norwich
- Büros nach Bürocode abrufen: GET http://localhost:8280/office?code=1
- Abrufen von Büros nach Städtename und Bürocode: GET http://localhost:8280/office?code=1&city=Norwich
Schlussfolgerung
Die Datenservice-Funktion in WSO2 Enterprise Integrator ist eine nützliche Funktion zur Bereitstellung von Daten aus verschiedenen Datenquellen. Zusammen mit der WSO2 EI-Mediationsfunktion können Daten in einem Kontrollmanager für Verbraucheranwendungen ausgesetzt werden.