Ich bin relativ neu in Bezug auf Java-Webentwicklungsfähigkeiten. Ich habe ein Projekt, von dem ich denke, dass es ein guter Kandidat für einen RESTful-Service wäre, wenn ich nur wenig über APIs verstehe. Ich versuche, mich mit den Details zu befassen, wie dies strukturiert sein soll, komme aber in Bezug auf die Google-Suche und das Lesen des Materials, das ich bereits habe, nicht wirklich weiter. Ich hoffe, dass dieser Beitrag eine gewisse Validierung und / oder Umleitung in Bezug auf mein Wissen und meine Annahmen zu diesem Thema liefert.
Ich gehe derzeit davon aus, dass mein RESTful-Service die folgende Struktur aufweist:
- Datenbankdaten (SQL).
- Ein ORM (ich verwende ein relativ unbeliebtes ORM namens CPO, das jedoch bei den meisten Menschen nur durch den Ruhezustand ersetzt wird).
- Eine Java-Manager-Klasse mit Methoden, die mit dem ORM kommunizieren, um die Daten abzurufen
- Eine oder mehrere Java-Controller-Klassen, die die Anforderungszuordnung verarbeiten und
@ResponseBody
die URL und Aktionen für den Umgang mit Daten über HTTP-Verben steuern / verarbeiten ( http://mysite.com/computers/dell), werden möglicherweiseGET
mit dem Wort "dell" angefordert. in der URL als Parameter, der ein JSON-Array mit Informationen zu Dell-Computern zurückgibt). - Dieser Dienst sollte mit Spring Boot ausgeführt werden oder in der Lage sein, eigenständig und unabhängig von anderen Anwendungen zu sein.
Unter der Annahme, dass das oben Gesagte korrekt ist, hätte ich (auf einer sehr einfachen Ebene) einen RESTful-Service, mit dem jede Anwendung Daten konsumieren und verwenden kann.
Sagen wir also, ich habe dann meine Webanwendung. Angenommen, ich erstelle eine Web-App mit Informationen zur Computerhardware und verwende Spring, um diese Web-App zu erstellen. Hier sind meine Annahmen:
- Ich hätte eine Reihe von Ansichten als JSPs, wobei die JSPs HTML-, CSS- und JavaScript-Includes enthalten. Das JavaScript verarbeitet AJAX-Aufrufe an den Controller dieser Anwendung nach Bedarf (siehe unten).
- Diese Web-App verfügt auch über einen eigenen Controller, der die URL-Anforderungen und das Routing der App verarbeitet, und der Controller verwendet dann beispielsweise das
ModelAndView
Objekt oder etwas in dieser Richtung, um mit dem Controller des RESTful-Dienstes zu "sprechen" und die übertragenen Daten abzurufen Übergeben Sie diese Daten zur Anzeige an die Ansicht (Javascript, JSP usw.) zurück.
Bin ich hier auf dem richtigen Weg? Ich verstehe, dass RESTful-Services auch einen Authentifizierungsaspekt haben, aber konzeptionell bin ich noch nicht da (und mein Projekt wird in einem privaten Netzwerk verwendet, sodass Sicherheit derzeit keine Priorität hat).
Jeder Einblick, jede Kritik, jedes Wissen, jedes Feedback oder jede Klarstellung wird sehr geschätzt.
@Autowire
wird als Ergebnis funktionieren.Obwohl ich den meisten Antworten von @ Minjun.Y zustimme, denke ich, dass ich einen etwas anderen Ansatz für die REST- und Webseitenebene wählen würde. Nach dem Lesen Ihrer Frage denke ich, dass Sie sowohl eine Webschnittstelle als auch eine REST-Schnittstelle der Außenwelt zugänglich machen möchten. Es gibt wenig zu gewinnen, wenn POJOs aus der Datenbank gelesen, die Daten in JSON und dann wieder in POJOs für den Verbrauch durch JSPs umgewandelt werden.
Ich würde es vorziehen, die Service-Schicht die gesamte eigentliche Arbeit erledigen zu lassen und separate "Präsentations" -Ebenen für die Web-App (JSPs) und den REST-Controller hinzuzufügen. Dies wären separate Controller, in die der Dienst eingespeist würde. Alternativ können Sie auch nur einen REST-Service verwenden und die gesamte Präsentationslogik auf der Clientseite gemäß der vorherigen Antwort erstellen.
Außerdem bin ich kein großer Fan von Maven-Modulen. Die Art und Weise, wie unser Java-Shop Ihr Projekt implementieren würde, besteht darin, regelmäßige Versionen der Service-Schicht zu erstellen und dann die Präsentationsebenen von der neuesten Version abhängig zu machen. Es gibt Raum für Diskussionen darüber, aber es funktioniert sicherlich für uns. Wir würden die Webschnittstelle und die REST-Schnittstellen als separate Maven-Projekte verwenden, da sie normalerweise in verschiedenen .war-Dateien gespeichert sind und daher eine separate Bereitstellung erfordern.
Übrigens würde ich die Notwendigkeit verstärken, sich mit Build- und Abhängigkeitsmanagement-Tools vertraut zu machen. Sobald Ihr Projekt eine angemessene Größe erreicht hat, benötigen Sie diese. Kostenlose Tools wie Maven, Jenkins und Nexus machen das Release-Management weniger problematisch.
quelle