REST API für eine lokale SQL Datenbank am Windows-Server über ODBC?

grabowashion

Ensign
Registriert
Sep. 2018
Beiträge
245
Hallo zusammen,
bin endlich soweit, etwas neues zu lernen.

Ich möchte Daten, die sich in einer SQL-Datenbank (Sybase) auf einem Windowsserver befinden, in einer Handy-App anzeigen.
Es soll auch möglich sein, in der App Datenänderungen (bspw. Kundenadresse ändern) vorzunehmen.

Diese Datenbank wird von einer Software benutzt und somit muss sie an diesem Server sein/bleiben und kann nicht bspw. auf AWS bereitgestellt werden.

Ich bin ganz neu zum Thema REST API, da ich das bisher nie benutzt habe.

Ich habe einen Zugriff auf die Datenbank über ODBC.
Wie kann ich diese Daten meiner künftigen Handy-App zur Verfügung stellen?
Da ich wirklich nicht weiß wie das geht und welche Programmiersprache ich dafür verwenden kann, bitte ich um Hilfe.

Mein Plan war:
  • Windows-App entwickeln, die einen Request an ODBC macht, um mir die Daten zu holen und später evtl. schreiben/updaten
  • entwickelte App lädt die Daten in eine Firebase/AWS/etc.-Datenbank hoch
  • meine Handy App bekommt Daten von dem Webserver
  • wenn ich Änderungen in der App vornehme, schicke ich diese an Webserver. Diese sollen dann wahrscheinlich von der Windows-App abgeholt und in die lokale Datenbank per ODBC eingespielt werden

Ist das richtig und wenn nicht, was denke ich falsch?
Ich habe noch nichts weder entwickelt noch angefangen.
Ich möchte zuerst verstehen, wie es läuft.

Brauche ich überhaupt eine Windows-App, die mir die Daten per ODBC holt oder geht das einfacher/anders?
Wenn ja, mit welcher Programmiersprache kann ich das machen und könnt Ihr mir einen Link mit einer kurzen Doku geben? Ist es Python, Java, Kotlin, Node.js, etwas anderes?

Ich denke, dass ich alles andere selbst im Internet finden werde, wie ich die Daten von bspw. Firebase mit Authentifizierung bekomme und zurückspiele, aber ich verstehe den Part mit Daten aus ODBC nicht.

Handy-App wird in Kotlin/Swift geschrieben, nachdem ich mit dem Online-Kurs fertig bin und die Sprache gelernt habe.

Es wäre super, wenn mir jemand das erklären könnte.
Bin sogar gerne auch bereit, ein “e-Bierchen“ auszugeben.
Dankeschön!
 
grabowashion schrieb:
Diese Datenbank wird von einer Software benutzt und somit muss sie an diesem Server sein/bleiben und kann nicht bspw. auf AWS bereitgestellt werden.
Das ist kein Grund für irgendwas. Am Ende hat jede normale Software einen Connectionstring zu einer DB und der kann zu einer lokalen oder einer DB sonst wo zeigen. Generell ist es nicht empfehlenswert alles auf einer Kiste zu betreiben...

Das schöne ist, dass AWS mit RDS einen managed DB-Service anbietet. Du musst dich um sehr wenig kümmern, es gibt automatisierte Backups, etc...
 
  • Gefällt mir
Reaktionen: mTw Raptor
Cokocool schrieb:
Das ist kein Grund für irgendwas. Am Ende hat jede normale Software einen Connectionstring zu einer DB und der kann zu einer lokalen oder einer DB sonst wo zeigen. Generell ist es nicht empfehlenswert alles auf einer Kiste zu betreiben...

Das schöne ist, dass AWS mit RDS einen managed DB-Service anbietet. Du musst dich um sehr wenig kümmern, es gibt automatisierte Backups, etc...

Ja, ich weiß, ist aber leider so, dass die Kunden das durch den Techniker machen/organiseren müssen.
Wir installieren die ERP-Software an der Windows-Maschine, die die uns zur Verfügung stellen.
Oft ist es so, dass die Kunden intern eine VM haben, wo unter anderem unser Server ist, wo die App läuft.
Sicherungen werden dann durch die Hardware-Firma gemacht und alles was den Windows-Server betrifft wird die Hardware-Firma gemacht.

Deshalb habe ich leider keine Möglichkeit, die DB auf AWS zu installieren.
Ich will aber nicht die ganze DB zur Verfügung stellen, sondern nur ein paar Tabellen, die relevant sind.
Die Datenbanken sind teilweise über 300GB groß und ich brauche ja nur einen Bruchteil davon.
 
Da hast du mehrere verschiedene Baustellen, um die du dich kümmern musst. Infrastruktur, Netzwerk, Security müssen die Grundlagen gebildet werden.

Danach erst geht es darum, wie die Daten auf die Handy App kommen/dargestellt werden.

Das ist nicht mal eben mit einem Post hier erklärt und wie immer führen mehrere Wege zum Ziel und jeder Weg hat seine Pro und Contras.

In Stichpunkten, damit du eine grobe Orientierung hast:
Infrastruktur/Netzwerk/Security:
Der Windows Server mit Sybase DB muss die Daten auf den Cloud Server synchronisieren; oder bei Echtzeit Notwendigkeit per Reverse Proxy im Internet (oder VPN wenn konfiguriert) mittels einer REST API auf dem Windows Server abholbar sein (wobei hier stellt sich dann die Frage, ob nicht die Handy App dann direkt die REST API auf dem Windows Server ansprechen kann [sofern kein VPN benutzt wird was Komfort Einbußen mit sich zieht].

Handy App:
Auch hier gibt es wieder etliche Lösungen. HTML5 + Javascript/Typescript Framework, Native Android / iOS, Xamarin, Flutter, ReactNative, Cordova, ElectronJS.

Du siehst... jede Menge Möglichkeiten und jede Menge an Dinge, die zu beachten sind.
 
  • Gefällt mir
Reaktionen: Cokocool und grabowashion
@DubZ
danke.
Also die Sprache für die Handyapp ist nicht wirklich das Problem. Hierfür habe ich schon Kurse gefunden und ich muss die Programmiersprache(n) lernen und diesen Part verstehe ich.

Was ich aber nicht verstehe ist, wie ich die Daten von einer lokalen SQL-DB zur Verfügung stellen kann.
Du hast mir das bisschen erklärt, ich habe aber noch ein paar Fragen dazu, da ich nicht so tief im Thema bin.

Wie kann der Windows-Server die Daten auf den Cloud-Server synchronisieren?
Eine Echtzeit Notwendigkeit ist nicht unbedingt notwendig, aber wenn das gemacht werden kann und die Daten sicher sind (mit bspw. Firebase/OAuth Authentifizierung oder?), würde ich das evtl. auch gerne in Echtzeit machen.
Reverse Proxy sagt mir erstmal nichts (werde ich googeln), aber für die Hardware-Firma soll es kein Problem sein, VPN zu diesem Server einzurichten oder?

Und wie komme ich denn wirklich an die Daten in dieser Datenbank ran? Hast du mir einen Beispiel, wie ich dann ein GET Request an die ODBC-Verbindung, in egal welcher Sprache, machen kann?
Oder muss ich diese Daten an diesem Server irgendwie als XML/CSV/etc. exportieren und ich greife dann per REST-API an diese Datei?
Besten Dank!
 
grabowashion schrieb:
Und wie komme ich denn wirklich an die Daten in dieser Datenbank ran? Hast du mir einen Beispiel, wie ich dann ein GET Request an die ODBC-Verbindung, in egal welcher Sprache, machen kann?
Nix GET-Request - das ist kein HTTP. Du/dein Backend muss eine SQL Abfrage machen.

Soll das ganze mal produktiv laufen ? Ganz ehrlich, dann lass die Architektur von einem Profi machen :)
 
  • Gefällt mir
Reaktionen: foo_1337
grabowashion schrieb:
Wie kann der Windows-Server die Daten auf den Cloud-Server synchronisieren?
in der Cloud läuft irgendein DBMS System. Dort legst du halt die Tabellenstruktur an. Dann muss in der Cloud ein Backend System laufen, welches in einer der gefühlt ~100 vorhandenen Programmiersprachen wie PHP, NodeJS, Java, ... eine REST API bereit stellt. Diese REST API die auf dem Cloud Server da ist muss von deinem Windows Server angesprochen werden, über ebenfalls einer der ~100 Programmiersprachen wo du dann den HTTP Request ausführst.

Sprich, auf dem Windows Server ein Backend welches die Daten aus der DB lädt und in ein strukturierten String wie JSON/XML packt und dann einen HTTP Request an das Backend auf dem Cloud Server schickt, der den String empfängt und dann in die DB schreibt.

Aber noch mal: das sind Dinge, da muss man sich schon eine Zeit lang mit beschäftigen und greift mehrere Themenbereiche ab.
 
  • Gefällt mir
Reaktionen: grabowashion
Cokocool schrieb:
Nix GET-Request - das ist kein HTTP. Du/dein Backend muss eine SQL Abfrage machen.

Soll das ganze mal produktiv laufen ? Ganz ehrlich, dann lass die Architektur von einem Profi machen :)
Danke.
SQL Abfrage geht natürlich auch, kein Problem.

Ja es soll eventuell irgendwann produktiv laufen. Vielleicht erst irgendwann in 1-3 Jahren aber das ist nicht Sinn der ganzen Gescichte.

Da ich nur Pascal und SQL Kenntnisse habe, und in unser App Sachen einrichten,
möchte ich etwas für mich selbst machen und meine Kenntnisse erweitern.
Also ich möchte etwas neues lernen.
ich will ein Projekt bzw. ein Ziel haben, was ich erreichen möchte wenn ich mit dem ganzen Lernen fertig bin.

Wie gesagt, es kann irgendwann produktiv gehen, aber an der ersten Stelle sind meine Programmierkenntnisse.
Ich wollte auch mal Web Development lernen, da man dafür deutlich mehr Kurse auf Udemy findet, habe mich aber doch entschieden, irgendwann etwas in der MobileApp-Welt zu machen.

Wenn Du Tipps hast - gerne her damit.
Ich will nur das ganze verstehen bevor ich mit dem Entwickeln/Lernen anfange.
Ergänzung ()

@DubZ
Danke.
Kannst du mir nur noch diesen Part erklären;
wie kann ich mit dem Backend ein SQL Befehl an meine schicken, um Daten zu erhalten? Das geht wahrscheinlich auch mit sehr vielen Programmiersprachen, aber hast du mir evtl. Nur einem Beispiel von StackOverflow oder Ähnliches, wo das gemacht wird?
Ich habe es irgendwie nicht gefunden, wie ich bspw. mit Kotlin/Java eine Funktion ausführen kann, die das macht. oder gerne auch in einer anderen Sprache. Besten Dank!
 
  • Gefällt mir
Reaktionen: foo_1337
Cokocool schrieb:
Dein Backend erwartet keine SQL Befehle, sondern HTTP. Es "übersetzt" eingehende HTTP Requests in SQL Requests. Die Daten holt sich das Backend dann von der SQL Datenbank per SQL.

Sowas hier z.B.
https://medium.com/voobans-tech-sto...rest-api-for-sql-server-database-7ddb595f751a

Funktioniert das auch mit Sybase? Ich habe schon einiges zu mssql gefunden aber kaum etwas zu Sybase. In diesem Beispiel wird ein npm für mssql verwendet

deshalb dachte ich, dass ich irgendwie per ODBC zugreifen kann, weil das halbwegs ein Standard ist und müsste wahrscheinlich für alle Datenbanken funktionieren.
Das ist vielleicht sogar mein größtes Problem, da alle Beispiele für andere “bekanntere sql Datenbanken sind.
Idealerweise Beispiel mit Kotlin Backend, da ich wahrscheinlich mit Kotlin anfangen werde. Natürlich irgendein anderes Beispiel in node.js oder wirklich egal was für ODBC wäre sehr hilfreich!
 
wenn du ein Backend in Kotlin schreiben möchtest, dann kannst du mittels eines sybase jdbc Treibers darauf zugreifen.
 
DubZ schrieb:
wenn du ein Backend in Kotlin schreiben möchtest, dann kannst du mittels eines sybase jdbc Treibers darauf zugreifen.
Alles klar, danke. Habe schon gegoogelt und mal was gefunden.
Nur ja, muss es immer ein Sybase JDBC Treiber sein oder gibt es etwas wie “Standard“-ODBC/JDBC Treiber?
Ich frage nur, da ich nicht weiß ob das nur so funktioniert oder gibts auch andere Wege, um das gleiche zu erreichen.
Sybase ist ja nicht mega bekannt (wie mssql)
 
sei mir nicht böse, aber dir fehlen einfach jede Menge an Erfahrungswerte bevor du überhaupt anfangen solltest, etwas umzusetzen.

Es gibt keinen Datenbanktreiber, der bei allen DBMS funktioniert. Es gibt DB Frameworks und Bibliotheken wie bspw. Hibernate, C3P0 usw., die eine ganze Anzahl an DBMS unterstützen. Aber logischerweise hat jedes DBMS seinen eigenen Treiber.

Wie gesagt, mach dich erst mal ein paar Wochen lang schlau zu Themen wie Infrastruktur, Netzwerk, Security, REST API, DBMS. Das ist eine ganze menge Stoff. Danach kann man gezielt einzelne Fragen beantworten.
 
@DubZ
bin gar nicht böse, alles gut! ;-) ich weiß, dass ich nicht mal annähernd soweit bin, überhaupt etwas machen zu können. Mir geht's eigentlich nur darum, das ganze zu verstehen.
Ich konnte aber den Treiber für Sybase finden (sajdbc4.jar) und konnte mit Kotlin Daten aus meiner Datenbank holen und Update/Insert/Create Befehle schicken, also diesen Part habe ich verstanden wie es funktioniert. Natürlich kenne ich mich damit nicht sofort aus, wollte nur mal sagen, dass mein Test erfolgreich war.

Ich habe aber heute den "ganzen" Tag nach Kotlin-Tutorials/Bootcamps gesucht, wo alles schön detailliert von billigsten Basics erklärt wird, konnte aber nicht wirklich etwas finden.
Somit denke ich, dass ich mit JS anfangen werde, da man für JS überall was findet. Auf Udemy sind die Kurse richtig lang und detailliert zu finden, von einfachen Arrays, Methoden, Variablen, bis zu "Master"-Level.

Ich denke, dass ich damit "modernes" Programmieren besser/einfacher verstehen werde.
Pascal ist ja "nichts". SQL wird mir schon was bringen aber da gibt's nicht so viel zu tun.
Deshalb muss ich leider statt direkt mit Kotlin anzufangen, etwas anderes machen.
Außer ich fange mit Java an. Da gibt's schon jede Menge Tutorials.. Aber mal sehen.

Ich bedanke mich aber, hast mir schon geholfen, den Ablauf halbwegs zu verstehen.
 
Wenn Javascript, dann meinst du vermutlich NodeJS. Weil Javascript eigentlich aus dem Frontend Bereich kommt und vor NodeJS gar nicht wirklich im Backend Bereich einsetzbar war.
Kotlin ist halt relativ neu. Wie du bereits erkannt hast, bei Java findest du eine ganze Ecke mehr.

Ich wünsche dir viel Erfolg.
 
Zurück
Oben