Rest mit Spring boot oder selbst anlegen

matze86

Bekanntes Mitglied
Hallo, ich möchte mal ein größeres Projekt erstellen, und das mit Maven. Dazu brauche ich bekanntlich ein REST zur Verbindung zur Datenbank.
Dann möchte ich in den Projekt noch mehr erstellen wie z.B. eine GUI u.s.w.

Eigentlich wollte ich mit der GUI anfangen und dann mit der Verbindung zur Datenbank enden.

Jetzt meine Frage, kann man die Rest API später noch hinzufügen oder wäre von Anfang an das Erstellen einer REST mittels spring boot erforderlich?

Braucht man da eigentlich spring boot oder kann man das auch selbst implementieren?
 

KonradN

Super-Moderator
Mitarbeiter
Im Augenblick verstehe ich Deine Aussagen nicht wirklich....

ich möchte mal ein größeres Projekt erstellen, und das mit Maven
Das ist ja erst einmal kein Problem... Die Frage ist da aber, was soll das für ein Projekt sein?

Dazu brauche ich bekanntlich ein REST zur Verbindung zur Datenbank.
Das macht erst einmal keinen Sinn. Du kannst einen REST WebService schreiben, mit dem Du Entities verwalten kannst, die in einer Datenbank gespeichert sind ... So gesehen kannst Du sozusagen mit einem REST Webservice eine Datenbank kapseln (wenn man es so ausdrücken will). Aber das brauchst Du in keiner Weise.

Eigentlich wollte ich mit der GUI anfangen und dann mit der Verbindung zur Datenbank enden.
Da weiss ich nicht, in wie weit das Sinn macht. Klar, man frühzeitig mit der Oberfläche beginnen - das ist dann der Bereich, der oft unter dem Stichwort UX/UI fällt. Das ist aber dann mehr der Design-Aspekt und da geht es dann oft um die Erstellung von Bildern oder UI Prototypen. Damit kann man Kunden frühzeitig einbinden, wie das Produkt aussehen wird, wie die Bedienung sein wird und so.

Das ist aber dann nicht der wirklich gradlinige Entwicklungsweg. Die Entwicklung läuft dann dennoch sozusagen "Bottom up" und die Ergebnisse vom UX/UI Spezialisten fließen dann in die eigentliche Entwicklung ein. So kenne ich das zumindest von Projekten.

In der Regel fängt man bei den meisten Projekten mit dem Kernmodel an. Das heisst Du machst die Entities. Bei Code first wird die Datenbank in der Regel direkt mit erstellt sprich: Das ist dann sowas wie ein automatisches Nebenprodukt.

Auf den Datenklassen baut man dann die Businesslogik / Controller.

Jetzt meine Frage, kann man die Rest API später noch hinzufügen oder wäre von Anfang an das Erstellen einer REST mittels spring boot erforderlich?
Du kannst da benötigte APIs immer hinzu fügen. Aber Dir sollte bewusst sein, dass eine API etwas sehr statisches und in der Regel unverändertes ist. Du solltest da also sehr genau wissen, was Du brauchst / willst.
(Und wenn Du Änderungen hast, dann hast Du das oft als neue API. Das heisst Du hast dann eine API v1 und dann kommt eine v2. Die haben dann auch in der Regel entsprechende Endpunkte und so ...

Es macht also tatsächlich Sinn, so eine API gut zu planen und zu dokumentieren. Dazu dient dann z.B. Swagger / Open API. Das kannst Du separat machen z.B. in einem Editor oder Du kannst so Dinge auch im Code integrieren. Dann würde die Dokumentation parallel erzeugt.

Braucht man da eigentlich spring boot oder kann man das auch selbst implementieren?
Natürlich kannst Du alles selbst implementieren. Das ist ja auch alles, was jemand anderes erst entwickelt hat. Nur eben ist das sehr viel Aufwand - Du kannst Dir ja einfach einmal anschauen, wie Umfangreich Projekte wie Spring Boot, Quarkus, Jakarta EE, ... sind.... Aber alles wurde entwickelt, setzt massiv auf andere Libraries und das kann man nachbauen.

Aber auf Grund des Aufwandes macht es tatsächlich Sinn, bestehende Dinge zu nutzen. Spring Boot bietet sehr viel.
Wenn Du die Entieties gebaut hast (mit ein paar Anotations), dann hast du die Datenbankzugriffe geschenkt. Sowohl mit Erzeugung / Aktualisierung der Datenbank als auch die Erstellung der Repositories für den Zugriff.

Wenn Du eine REST API für die Entities für CRUD Operationen haben willst: Kannst Du über ein Spring Boot Modul einbinden und konfigurieren...

Swagger Dokumentation der API (So du die in Annotations mit gesetzt hast): Wird erstellt und mit angeboten ....

Also ja: Es macht Sinn für ein Projekt, fertige Lösungen zu nutzen.
 

matze86

Bekanntes Mitglied
Das ist schon mal ein Sehr guter Ansatz.

Naja ich möchte auf eine Datenbank zugreifen (mittels REST?), dann die Daten in ein Programm Auswerten bzw. zerlegen, zusammenfügen wie auch immer und anschließend auf einer GUI ausgeben.
Wie ich hier im Forum gelernt habe (älterer Thread von vor über einen Jahr), sollte man nicht so auf die Datenbank (die übrigens entfernt liegt) zugreifen, sondern mit einen REST, am besten noch mit DTO.
Deswegen die Frage wegen spring boot, denn das bietet es ja an.

Was heißt Datenbank automatisch anlegen? Bisher habe ich Datenbanken (MySQL) immer händisch mit Linux und Terminal angelegt.

Also fange ich mit dem erstellen einer Datenbank an, dann erzeuge ich über Spring Boot ein Maven Projekt und sichere mir erst einmal den Zugriff mittels REST.

Wenn ich das habe kann ich die Daten verarbeiten, anzeigen u.s.w.

Ist das so richtig?
 

KonradN

Super-Moderator
Mitarbeiter
Ja, Du greifst nicht über das Internet direkt auf die Datebank zu. Das gilt als nicht sicher.

Somit sollte der Zugriff lokal erfolgen, also entweder auf dem gleichen Rechner oder zumindest das gleich Netzwerk.

Und ja - du kannst eine Anwendung schreiben, die auf die Datenbank zugreift (per JDBC erfolgt das oder auf einem höheren Level JPA / Hibernate) und die Daten dann per Web Requests (z.B. per REST Webservice) bereit stellt.

Aber wenn du da bereits auf einem Rechner diese Anwendung laufen lässt: Wieso lässt Du da nicht direkt die ganze Anwendung laufen? Dann sparst Du dir die Unnötigen Zugriffe.

Was heißt Datenbank automatisch anlegen? Bisher habe ich Datenbanken (MySQL) immer händisch mit Linux und Terminal angelegt.
Sowas kann man machen aber das ist nicht notwendig. Du kannst das selbst ausprobieren bei der Entwicklung mit einer einfachen Spring Boot Anwendung, welche Daten in einer H2 Datenbank (oder so) speichert. Dann siehst Du paar Möglichkeiten. Und dann kannst Du klein Anfangen - also z.B. mit einer ersten Web-Anwendung, auf der Du mit Thymeleaf Daten als Webseite anzeigst. Du machst also Entities, die der Datenbankstruktur entsprechen. Zum Entwickeln kannst Du auch lokal auch ein mysql verwenden. Das Deployment kommt dann erst später. Wäre das evtl. eine Idee?

Gerade in der Entwicklung ist das recht schön. Ich nutze das sehr gerne um daraus dann aber die SQL Scripts abzuleiten mit denen ich Datenbanken erzeuge oder aktualisiere. Aber da gibt es auch sehr gute Tools wie Liquibase oder Flyway.

Also fange ich mit dem erstellen einer Datenbank an, dann erzeuge ich über Spring Boot ein Maven Projekt und sichere mir erst einmal den Zugriff mittels REST.
Ich würde mit direktem Datenbankzugriff anfangen. Dann hast Du ein einzelnes Projekt und kannst damit dann langsam starten. Ich fürchte, dass Du eh sehr viele Punkte lernen musst, ehe Du es öffentlich machen solltest (Es kommen ja Dinge hinzu, wie Spring Security und so).
 

Oneixee5

Top Contributor
Der Zugriff auf eine Datenbank erfolgt mit JDBC. Es ist aber richtig, dass man JDBC nicht übers Internet verwendet. JDBC sollte nur in einer vertrauenswürdigen Umgebung verwendet werden. Per REST kommuniziert man zwischen einen Client (das kann ein Browser sein) und einem Server.

Ein Spring-Boot-Projekt erzeugt man am besten über: https://start.spring.io/
Wenn man nicht alles, von Beginn an, festlegen kann, ist das nicht so schlimm. Man kann das später über Maven erweitern. Möglicherweise unterstützt das auch deine IDE.
Zu Beginn benötigt man mehrere Dependencies. Du brauchst wenigsten: "Spring Web" für REST, "Spring Security" für Anmeldung wenn erforderlich, "Spring Data JPA" oder "Spring Data JDBC" für den Datenbankzugriff, inkl. einer Treibers "H2 Database SQL" oder "PostgreSQL Driver". Vergiss MySQL, das hat Oracle kaputt bekommen. Außerdem "Validation" und "Spring Boot Actuator".
 

matze86

Bekanntes Mitglied
OK, aber wenn die Datenbank only auf einen Server liegt, dann muss ich ja die Datenbank per Hand erstellen denke ich mal.
Ich erstelle mir mittels Springboot ein Restful und erstelle auch ein "WebSecurityConfigurerAdapter" um das Passwort zu verschlüsseln.
Weil meine entfernte Datenbank ein Passwort besitzt.

aber ich werde erstmal lokal eine Datenbank erstellen, das mit der externen kommt zum Schluss wenn alles andere funktioniert.

Was meinst du mit Oracle hat MySQL kaputt gemacht?
 

KonradN

Super-Moderator
Mitarbeiter
OK, aber wenn die Datenbank only auf einen Server liegt, dann muss ich ja die Datenbank per Hand erstellen denke ich mal.
Nein, das ist nicht zwingend notwendig (So Du das Datenbankschema meinst). Die Software kann die Befehle zum erstellen des Schemas ja auch an die Datenbank geben.

Und was meinst du mit "Datenbank only"? Du brauchst da auch eine Software. Dabei ist es egal, ob Du da dann "nur" einen REST Service bereit stellst oder gleich die ganze Anwendung.

Ich erstelle mir mittels Springboot ein Restful und erstelle auch ein "WebSecurityConfigurerAdapter" um das Passwort zu verschlüsseln.
Das ist nicht zwingend notwendig. Du hast das Problem, dass Du das Passwort ja auch entschlüsseln musst. Wenn Du also die Kontrolle über den Server verlierst, dann ist das Passwort so oder so kompromittiert. Dabei ist egal, ob das Passwort einfach im Klartext im Config-File lag oder ob Du es irgendwie verschlüsselt hast. Mit dem Zugriff auf den Server ist auch das verschlüsselte auslesbar.

Wichtig ist halt, dass der Server sicher ist.

Was meinst du mit Oracle hat MySQL kaputt gemacht?
Mysql war lange zeit eine sehr schlechte Datenbank die viele Features erst sehr spät bekommen hat. Daher ist MySQL ist den Augen vieler (auch in meinen Augen) alles andere als optimal. Aber sie ist halt sehr stark vertreten m Internet. Aber eine bessere Alternative wäre aus meiner Sicht z.B. PostgreSQL. Und Oracle ist auch ein Hersteller, der eher schräg angesehen wird. So gibt es Leute (wie mich), die auch Oracle Java verzichten und statt dessen OpenJDK anderer Hersteller (Ich greife auf das von Eclipse zurück) nutzt. Aber das ist eine persönliche Sichtweise und man muss kein Oracle Bashing starten (Ok, ich muss ... das gilt bei mir aber bereits als psychische Erkrankung und das sind damit Ticks, für die ich nichts kann. Oracle, Eclipse IDE, .... da kommen immer Ticks in Form von Bashing :) SCNR )

Das ist aber nicht entscheidend. Fang mit den Entities an, lass die Datenbank von Spring Boot erzeugen. Dann kannst Du es auch super testen. Dabei ist egal, was Du für eine Datenbank verwendest. Das kann auch mysql sein mit z.B. einer Einstellung, dass das Datenbankschema bei Tests automatisch gelöscht und neu erstellt wird. Aber da ist es aus meiner Sicht eher üblich, eine Datenbank zu nutzen, die nicht installiert werden muss. Also sowas wie H2. Dann laufen die Tests auch auf dem Buildserver ohne Probleme und ohne Abhängigkeiten zu einer Datenbank.

Und bei Spring Boot JPA kannst Du die Datenbank sehr einfach wechseln. Du willst statt MySQL PostgreSQL? Einfach in dem Config File anpassen.

Aber mein Tip ist wirklich: Arbeite Dich da langsam ein. Folge mal ein paar Tutorials oder so. Dann siehst Du auch schnell dieses "Code First", d.h. Du musst mit der Datenbank nicht anfangen!
 

matze86

Bekanntes Mitglied
Wichtig ist halt, dass der Server sicher ist.
Genau, deswegen muss der Server, bzw deren Datenbank ein Passwort haben.

Ja stimmt, ich habe jetzt den Client mit dem Server verwechselt. Der Server braucht ja den REST.
Auf dem Client kann ich ja dann beliebig zugreifen.
Ich war mit meinen Gedanken so, das ich mit dem REST-Client direkt auf die Datenbank zugreife, also host:port dann User und Passworteingabe.

Und Spring boot erstellt, bzw installiert mir eine komplett neue Datenbank?
 

KonradN

Super-Moderator
Mitarbeiter
Die Frage ist, ob Du den REST Service selbst schreiben musst. Zu mysql gibt es MRS - den Mysql Rest Service.
MRS Developer's Guide (mysql.com)

Du willst ja in erster Linie nur den JavaFX Client schreiben und da wäre dann so eine Lösung evtl. zielführender. Bei den Antworten zuvor bin ich davon ausgegangen, dass Du eine Web Anwendung schreiben würdest, aber das hat sich ja nicht bestätigt.
 

matze86

Bekanntes Mitglied
Nein eine Webanwendung möchte ich nicht schreiben.
Also brauche ich ja auf dem Client keinen REST, so wie ich das sehe, denn als client kann man sch ja über host:port und Passwort die Daten holen.
 

Oneixee5

Top Contributor
Nein eine Webanwendung möchte ich nicht schreiben.
Also brauche ich ja auf dem Client keinen REST, so wie ich das sehe, denn als client kann man sch ja über host:port und Passwort die Daten holen.
Zuerst musst du dich mal informieren. REST ist nur ein Art vorzugehen, das ist nichts physisches. Es gibt dazu Frameworks, welche dieses Vorgehen unterstützen, und zwar für den Client und/oder den Server.

REST bildet CRUD ab, quasi als das Web für Datenbanken - stark vereinfacht.
CRUD ist die Abkürzung für CREATE (Erstellen), READ (Lesen), UPDATE (Aktualisieren) und DELETE (Löschen). Dies sind die vier grundlegenden Operationen zur Erstellung und Verwaltung persistenter Datenelemente, die hauptsächlich in relationalen Datenbanken zum Einsatz kommen.
 

mihe7

Top Contributor
Genau, deswegen muss der Server, bzw deren Datenbank ein Passwort haben.
Das würde ich jetzt nicht unter einem "sicheren Server" verstehen. Da gehört für mich mehr dazu: das geht damit los, dass der Rechner in einem sicheren Rechenzentrum (mit entsprechendem Brandschutz und Zutrittskontrollen ausgestattet, damit nicht jeder Hans Dampf rumwerkeln kann) steht und die Hardware entsprechend gewartet wird. Backups verstehen sich von selbst. Dann hat auf dem Server nichts installiert zu sein (und schon gar nicht zu laufen), was für den Betrieb nicht benötigt wird. Der Zugriff aus dem Internet heraus ist auf das absolut Notwendige zu beschränken. In der Regel sind max. der SSH- und der HTTPS-Port offen (Zugriff auf eine DB aus dem Internet heraus ist der Sündenfall schlechthin). SSH ist derart konfiguriert, dass es weder Root-Zugriff noch einen Login mit einem Passwort gibt. Vielmehr wird auf ein Public Key Verfahren mit aktuell als sicher eingestuften Algorithmen zurückgegriffen (da muss man sich immer wieder mal informieren). Würden wir nicht ständig Zugriff auf die Server benötigen, gäbe es noch nicht einmal den SSH-Zugang, weil der Provider auch Zugriff über eine Remote-Konsole erlaubt. Neben der obligatorischen Firewall gibt es ein Intrusion Prevention System, mit dem unrechtmäßige Zugriffsversuche geloggt und geblockt werden. Manche scannen die Systeme regelmäßig auf den Einsatz von Software mit bekannten Schwachstellen.

Das ist aber nicht das Ende, sondern gerade einmal der Anfang. Der schönste Server bringt nichts, wenn die Anwendung Schrott ist. Da können Kleinigkeiten entscheidend sein, z. B. Dinge wie SQL-Injection, die blinde Übernahme von Daten der Clients oder bei mandantenfähigen Systemen einfach mal den Mandanten vergessen, so dass der Zugriff auf die Daten der anderen Kunden erhält usw.

Kurz: Sicherheit ist ein äußerst komplexes Thema und bekommt man nicht geschenkt. Ich bin mitnichten ein Experte, aber ich denke, dass es ein paar Grundprinzipien gibt, die man einhalten kann und sollte. Dazu gehören Dinge wie PreparedStatements innerhalb der Anwendung oder dass man keinen direkten Zugriff auf die DB aus dem Internet heraus ermöglicht.
 

matze86

Bekanntes Mitglied
Da gehört für mich mehr dazu

Ja da hast du vollkommen recht. Ich habe schon einen externen Server laufen mit Nextcloud. Den habe ich auch gut abgesichert mit den u.a. was du vorgeschlagen hast.
Bei mir geht es darum , wenn ich einen externen Server habe mit einer Datenbank, da möchte ich drauf zugreifen, da muss ich einen REST erstellen. darum geht es mit.
Muss ich das auch beim Client machen?
 

mihe7

Top Contributor
Bei mir geht es darum , wenn ich einen externen Server habe mit einer Datenbank, da möchte ich drauf zugreifen, da muss ich einen REST erstellen. darum geht es mit.
Ja, das ist eine durchaus gängige Möglichkeit.

Muss ich das auch beim Client machen?
Ich verstehe die Frage nicht. Du hast auf dem Server einen REST-Service, der Anfragen verarbeitet (EDIT: im Zuge dessen wird z. B. auf die Datenbank zugegriffen) und eine entsprechende Antwort sendet. Der Client greift per HTTP(S) darauf zu.
 

matze86

Bekanntes Mitglied
Ja stimmt, man greift ja per http zu, den Rest braucht man ja nur beim Server.
Vielen Dank für die vielen ausführlichen und sehr verständlichen Antworten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Rest- Api mit HTTP BASIC Authentication Java Basics - Anfänger-Themen 16
I REST Api / JAX-RS, Swagger (OpenAPI) - generelle Starthilfen benötigt Java Basics - Anfänger-Themen 15
S Teilen ohne Rest Java Basics - Anfänger-Themen 15
tom.j85 Externe Rest API konsumieren Java Basics - Anfänger-Themen 9
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
R Warum werden hier nur die grün und orangen Linien ausgegeben und der Rest unten nicht? Java Basics - Anfänger-Themen 5
D NodeJS Rest Api Erkläre Java Basics - Anfänger-Themen 3
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
J XML-Strukturen für REST-Service erstellen Java Basics - Anfänger-Themen 1
H Schleife für Teilen mit Rest Java Basics - Anfänger-Themen 1
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
D Rest ausrechnen Java Basics - Anfänger-Themen 2
J division mit rest Java Basics - Anfänger-Themen 8
F Teilen mit Rest Java Basics - Anfänger-Themen 12
O JRadioButton's - Einen aktivieren/ Rest deaktivieren Java Basics - Anfänger-Themen 5
M Rest herausfinden Java Basics - Anfänger-Themen 2
J Rest einer Zahl herausfinden Java Basics - Anfänger-Themen 3
R Spring Boot: Ordnerstruktur Java Basics - Anfänger-Themen 3
A Spring Boot Java Basics - Anfänger-Themen 5
Dimax JSP vs Spring Thymleaf Java Basics - Anfänger-Themen 29
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
X Ist das Spring Framework Einsteigerfreundlich? Java Basics - Anfänger-Themen 2
B EJB oder Spring/Hibernat Java Basics - Anfänger-Themen 3
M Wohin mit den JAVA Libraries (spring, jalopy etc.) ? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben