Je suis relativement nouveau en termes de compétences en développement Web Java. J'ai un projet qui, je pense, ferait un bon candidat pour un service RESTful à partir du peu que je comprends des API. J'essaie d'entrer dans les détails de la façon dont cela est censé être structuré, mais je n'arrive vraiment à rien en termes de recherches Google et de lecture du matériel que j'ai déjà. J'espère que ce post donnera une validation et / ou une redirection en termes de mes connaissances et hypothèses sur ce sujet.
Mon hypothèse actuelle est que mon service RESTful aura la structure suivante:
- Données de base de données (SQL).
- Un ORM (j'utilise un ORM relativement impopulaire appelé CPO, mais cela serait juste remplacé par Hibernate avec la plupart des gens).
- Une classe de gestionnaire Java avec des méthodes qui communiquent avec l'ORM pour obtenir les données
- Une classe / des classes de contrôleur Java qui gère le mappage des demandes et utilise
@ResponseBody
pour diriger / gérer l'URL et les actions de gestion des données via les verbes HTTP ( http://mysite.com/computers/dell peut êtreGET
demandé avec le mot "dell" dans l'URL étant un paramètre qui renverra un tableau JSON d'informations sur les ordinateurs Dell). - Ce service doit être effectué avec Spring Boot, ou être en quelque sorte autonome et indépendant de toute autre application.
En supposant maintenant que ce qui précède est correct, j'aurais (à un niveau très basique) un service RESTful que toute application peut utiliser pour consommer et utiliser des données.
Alors disons que j'ai ensuite mon application web. Supposons que je crée une application Web sur les informations sur le matériel informatique et que j'utilise Spring pour créer cette application Web. Voici mes hypothèses:
- J'aurais un tas de vues en tant que JSP, avec les JSP ayant des inclusions HTML, CSS et JavaScript. Le JavaScript traiterait les appels AJAX au contrôleur de cette application selon les besoins (ci-dessous).
- Cette application Web aurait également son propre contrôleur pour gérer les demandes d'URL et le routage de l'application, et le contrôleur utiliserait alors, disons, l'
ModelAndView
objet ou quelque chose du genre pour "parler" au contrôleur du service RESTful, obtenir toutes les données transmises , retransmettez ces données à la vue (Javascript, JSP, etc ...) pour les afficher.
Suis-je sur la bonne voie, ici? Je comprends qu'il existe également un aspect d'authentification dans les services RESTful, mais je n'y suis pas encore conceptuellement (et mon projet va être utilisé dans un réseau privé, la sécurité n'est donc pas une priorité à ce stade).
Toute perspicacité, critique, connaissance, rétroaction ou clarification est grandement appréciée.
@Autowire
fonctionnera en conséquence.Tout en étant d'accord avec la plupart des réponses de @ Minjun.Y, je pense que j'opterais pour une approche légèrement différente de la couche REST et de la page Web. D'après ma lecture de votre question, je pense que vous voulez exposer à la fois une interface Web et une interface REST au monde extérieur. Il y a peu à gagner en lisant les POJO de la base de données, en transformant les données en JSON, puis en les retournant en POJO pour la consommation des JSP.
Je préférerais que la couche de service fasse tout le travail réel, et l'ajout de couches de "présentation" distinctes pour l'application Web (JSP) et le contrôleur REST. Il s'agirait de contrôleurs distincts, dans lesquels le service serait injecté. Alternativement, optez pour un service REST et créez toute la logique de présentation côté client comme indiqué dans la réponse précédente.
De plus, je ne suis pas un grand fan des modules Maven. La façon dont notre boutique Java implémenterait votre projet serait de faire des versions régulières de la couche service, puis de rendre les couches de présentation dépendantes de la dernière version. Il y a de la place pour une discussion à ce sujet, mais cela fonctionne certainement pour nous. Nous aurions l'interface Web et les interfaces REST en tant que projets Maven distincts, car ils vivent normalement dans des fichiers .war différents et nécessitent donc un déploiement séparé.
BTW, je renforcerais la nécessité de se familiariser avec les outils de gestion de build et de dépendance. Une fois que votre projet atteint une taille raisonnable, vous en avez besoin. Des outils gratuits comme Maven, Jenkins et Nexus rendent la gestion des versions moins problématique.
la source