it-swarm.com.de

Struktur des RESTful Service mit Java Spring für Anfänger

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 es Gehen Sie auf die Details ein, wie dies strukturiert sein soll, aber in Bezug auf Google-Suchanfragen und das Lesen des Materials, das ich bereits habe, nicht wirklich weiterzukommen. Ich hoffe, dass dieser Beitrag eine gewisse Validierung und/oder Umleitung in Bezug auf meine Kenntnisse und Annahmen zu diesem Thema.

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).
  • A Java Manager-Klasse mit Methoden, die mit dem ORM kommunizieren, um die Daten zu erhalten
  • A Java Controller-Klasse/-Klassen, die die Anforderungszuordnung handhaben und @ResponseBody Verwenden, um die URL und Aktionen für den Umgang mit den Daten über HTTP-Verben ( http : //mysite.com/computers/Dell ist möglicherweise eine GET -Anforderung, wobei das Wort "Dell" in der URL ein Parameter ist, 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 würde AJAX Aufrufe an den Controller dieser Anwendung nach Bedarf verarbeiten (siehe unten).
  • Diese Web-App hätte auch einen eigenen Controller, der die URL-Anforderungen und das Routing der App verarbeitet, und der Controller würde dann beispielsweise das ModelAndView -Objekt oder etwas in dieser Richtung verwenden, um mit dem Controller des RESTful-Dienstes zu "sprechen". Erhalten Sie alle Daten, die übergeben werden, und geben 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.

12
aCarella

Hier ist eines meiner Lieblingsbeispiele für die Struktur Ihrer Frühlingsruhe-App.

1. Trennung von Ebenen, jede Ebene ist ein einzelnes Modul/Projekt

  • REST API
    • Verpackt als war (Könnte jar sein, wenn Sie Spring Boot mit eingebettetem Server verwenden. Das Spring Boot-Dokument erklärt klar, wie der so-call bereitgestellt wird über Glas. Es ist tödlich einfach.)
    • Es verfügt über Rest-Controller, die Anforderungen/Antworten verarbeiten
    • hängt ab von Service Modul unten
  • Service
    • Verpackt als jar
    • Diese Logikschicht hat keine Ahnung, wie sie mit der Datenquelle kommunizieren soll.
    • Es wird automatisch verdrahtet in Rest-Controllern sein
    • Hängt vom Modul DAO/Repository ab
  • DAO/Repository
    • Verpackt als jar
    • Spricht direkt mit der Datenquelle und hat Operationen, die allgemein als CRUD bekannt sind. Es kann sich um einfachen JDBC-, JPA- oder sogar Dateizugriff handeln.
    • Hängt vom Modul Domain ab
  • Domain
    • Verpackt als jar
    • Es hat Ihre Domain-Modelle, normalerweise POJO-Klassen. Wenn Sie ORM verwenden, handelt es sich um ORM-Entitäten.
    • Es könnte auch DTO (Data Transfer Object) geben, die sich noch in heißen Debatten befinden. Verwenden Sie es oder nicht ist Ihr Anruf.
  • Sie können weitere Module hinzufügen, z. B. Dienstprogramm, Integration von Drittanbietern usw. Die oben genannten Module werden jedoch dringend empfohlen.

2. Build/Dependency Management Tools (IMHO sehr notwendig)

Es gibt viele davon, Google Search wird es Ihnen zeigen. Ich persönlich mag Maven mit Spring. Es funktioniert einfach für die obige Projektstruktur.
Beachten Sie auch, dass es bei Verwendung von Maven ein übergeordnetes Modul gibt, das alle in Abschnitt 1 beschriebenen Module zusammenfasst. Alle Aufzählungspunktmodule entsprechen auch Maven-Modulen.

3. Gedanken zu Ihrem speziellen Projekt

Da Sie REST verwenden, würde ich dringend empfehlen, JSP NICHT als Ansicht zu verwenden. Sie können einfaches HTML5 + Javascript oder ein beliebtes Framework wie AngularJS als Ihre Ansicht verwenden.
Wenn Sie darauf bestehen, JSP zu verwenden, müssen Sie eine weitere war (Web-App) einführen, die Controller und JSPs enthält. Der Controller erhält die Daten (normalerweise Json/XML-Format) und analysiert sie dann in Ihre Modelle (POJO), damit Ihre JSP sie von Ihrem Controller abrufen und anzeigen kann. Das Posten von Daten aus JSP ist umgekehrt, ich habe hier weggelassen.

Es ist bei weitem kein vollständiger Leitfaden, da dieses Thema sehr umfangreich ist und stark von Ihren spezifischen Anforderungen abhängt. Die hier enthaltenen Begriffe reichen jedoch aus, um zusätzliche Nachforschungen anzustellen (Google ist es). Hoffentlich gibt Ihnen dies einige Ideen, wie Sie vorgehen sollen.

19
Minjun Yu

Obwohl ich den meisten Antworten von @ Minjun.Y zustimme, denke ich, dass ich einen etwas anderen Ansatz für die Ebene REST und Webseite) wählen würde. Nach dem Lesen Ihrer Frage denke ich, dass Sie möchten sowohl eine Webschnittstelle als auch eine REST Schnittstelle) für die Außenwelt verfügbar machen. Es gibt wenig zu gewinnen, wenn POJOs aus der Datenbank gelesen, die Daten in JSON und dann wieder in POJOs für umgewandelt werden Verbrauch durch JSPs.

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 die Service würde injiziert werden. 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 Releases 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 gibt funktioniert sicherlich für uns. Wir hätten die Webschnittstelle und REST Schnittstellen als separate Maven-Projekte, da sie normalerweise in verschiedenen .war-Dateien gespeichert sind und daher eine separate Bereitstellung erfordern.

Übrigens würde ich die Notwendigkeit verstärken, mit Build- und Abhängigkeitsmanagement-Tools auf dem neuesten Stand zu sein. 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.

2
kiwiron