PostgreSQL / Postgraphile
Um aus bestehenden Daten in PostgreSQL-Datenbanken schnellstmöglich eine Programm-Schnittstelle zu erzeugen verwenden wir das Framework Postgraphile. Dieses erlaubt es innerhalb weniger Sekunden aus einer PostgreSQL-Datenbank ein GraphQL-Server zu starten. Das Schema des GraphQL-Servers leitet sich aus den Tabellen und Spalten der PostgreSQL -Datenbank ab.
Die generierten GraphQL-Server lassen sich dann im GraphQL-Gateway zusammenführen. Über GraphQL-Merging werden mehrere GraphQL-Endpunkte zu einem einzigen GraphQL-Endpunkt zusammengführt. Dabei können die GraphQL-Felder und Typen umbenannt, umstrukturiert und mit zusätzlicher Logik ausgestattet werden. Mehr dazu im Punkt Backend GraphQL -Modules
FrEDA PostgreSQL & Prodat-PostgreSQL
Standardmäßig gibt es im FrEDA zwei externe DatenSources, für de Prodat-Datenbank und die FrEDA-Datenbank, welche Nutzerinformationen, Rollen und sontiges beinhaltet.
Start der externen Dienste kann über den Befehl
yarn freda-externalim Root des Projektes ausgeführt werden
Nach dem Start der beiden Postgraphile-GraphQL-Server können diese unter folgender Browser-UI lokal untersucht und getestet werden.
| Dienst | Standard-Port | Browser-UI |
|---|---|---|
| GraphQL-Server: Postgraphile Prodat (Microservice) | 4444 | [Protokoll]://[Host]:4444/postgraphile/graphiql (GraphiQL) |
| GraphQL-Server: Postgraphile Admin-UI (Microservice) | 5555 | [Protokoll]://[Host]:5555/postgraphile/graphiql (GraphiQL) |
Diese Endpunkte sollten immer hinter einem Proxy oder Firewall liegen und nicht im Netzwerk ersichtlich sein, da sonst direkter Zugriff auf die Datenbank gewährt wird. Es ist keine Authorisierung notwendig!
Beide Services machen innerhalb weniger Sekunden aus den PostgreSQL-Datenbank-Schema-Tabelle(n) einen funktionsfähigen GraphQL-Server.
postgraphile erkennt dabei automatisch relationen zwischen den Tabellen und bildet 1 zu N Beziehungen per Connection im GraphQL-Server ab. Ein GraphQL-Abfragefeld liefert dann ein Array eines GraphQL-Types zurück.
zusätzliche installierte Plugins
Postgraphile lässt sich mit Plugin erweitern. So ist es möglich vor GraphQL-Server Generierng bereits Geschäftlogiken hinzuzufügen, oder Feldnamen umzunennen oder zu transformieren.
PostGraphileConnectionFilterPlugin
dieses Postgraphile-Plugin ermöglicht eine bessere Filterung bei Connections / Listen, um bswp. folgende Abfrage in eine Query zu integrieren:
- isNull
- equalTo
- include
- like
- ...
um nur ein paar Beispiele zu nennen. Ds Plugin erlaubt sozusagen ähnliche Abfragen wie auch ein Where in PostgreSQL.
SchemaExtensionPlugin
eigenes Plugin, welches es ermöglicht GraphQL-Typen zu erweitern um bswp. Relationen zwischen Views zu ermöglichen, welche von PostgreSQL und Postgraphile nicht standardmäßig erkannt werden. So ist es möglich zwischen Views eine Verbindung hezustellen, welche eine 1 zu N Beziehung darstellen.
MakeAddInflectorsPlugin
eigenes Plugin, welches es ermöglich vor GraphQL-Server Erstellung einige Typen- oder Feld-Namen umzunennen, um Konflikte in der Namengebung zu vermeiden. Bswp. lässt es Typen mit dem Schema-Prefix ausstatten, falls es gleieche Tabellen-Bezeichungen in den unterschiedlichen PostgreSQL-Schemas gibt.
More
Für eine detaillierte Dokumentation von Postgraphile besuche: Postgraphile
