Soy relativamente nuevo en términos de habilidades de desarrollo web Java. Tengo un proyecto que creo que sería un buen candidato para un servicio RESTful por lo poco que entiendo sobre las API. Estoy tratando de entrar en detalles sobre cómo se supone que está estructurado, pero en realidad no llego a ninguna parte en términos de búsquedas en Google y leer el material que ya tengo. Espero que esta publicación produzca alguna validación y / o redirección en términos de mi conocimiento y suposiciones sobre este tema.
Mi suposición actual es que mi servicio RESTful tendrá la siguiente estructura:
- Datos de la base de datos (SQL).
- Un ORM (estoy usando un ORM relativamente impopular llamado CPO, pero esto simplemente se reemplazaría con Hibernate con la mayoría de las personas).
- Una clase de administrador de Java con métodos que hablan con el ORM para obtener los datos.
- Una clase / clases de controlador Java que maneja la asignación de solicitudes y las utiliza
@ResponseBody
para dirigir / manejar la URL y las acciones de cómo se manejan los datos a través de verbos HTTP ( http://mysite.com/computers/dell puedeGET
solicitarse con la palabra "dell" en la URL es un parámetro que devolverá una matriz JSON de información sobre computadoras dell). - Este servicio debe hacerse con Spring Boot, o de alguna manera ser capaz de ser independiente y ser independiente de cualquier otra aplicación.
Ahora, suponiendo que lo anterior es correcto, entonces tendría (en un nivel muy básico) un servicio RESTful que cualquier aplicación puede usar para consumir y usar datos.
Digamos que tengo mi aplicación web. Digamos que estoy haciendo una aplicación web sobre información de hardware de computadora, y estoy usando Spring para construir esta aplicación web. Aquí están mis suposiciones:
- Tendría muchas vistas como JSP, con las JSP que incluyen HTML, CSS y JavaScript. El JavaScript manejaría las llamadas AJAX al controlador de esta aplicación según sea necesario (a continuación).
- Esta aplicación web también tendría su propio controlador para manejar las solicitudes de URL de la aplicación y el enrutamiento, y luego usaría, digamos, el
ModelAndView
objeto o algo por el estilo para "hablar" con el controlador del servicio RESTful, obtener los datos que se pasan , devuelva esos datos a la vista (Javascript, JSP, etc.) para su visualización.
¿Estoy en el camino correcto, aquí? Entiendo que también hay un aspecto de autenticación para los servicios RESTful, pero todavía no estoy allí conceptualmente (y mi proyecto se va a utilizar en una red privada, por lo que la seguridad no es una prioridad en este momento).
Cualquier idea, crítica, conocimiento, retroalimentación o aclaración es muy apreciada.
@Autowire
funcionará como resultado.Si bien estoy de acuerdo con la mayoría de las respuestas de @ Minjun.Y, creo que tomaría un enfoque ligeramente diferente para la capa REST y la página web. De mi lectura de su pregunta, creo que desea exponer tanto una interfaz web como una interfaz REST al mundo exterior. Hay poco que ganar leyendo POJO de la base de datos, convirtiendo los datos en JSON y luego nuevamente en POJO para que los JSP los consuman.
Me gustaría hacer que la capa de servicio haga todo el trabajo real y agregar capas separadas de "presentación" para la aplicación web (JSP) y el controlador REST. Estos serían controladores separados, en los que se inyectaría el servicio. Alternativamente, vaya con solo un servicio REST y construya toda la lógica de presentación en el lado del cliente según la respuesta anterior.
Además, no soy un gran fanático de los módulos Maven. La forma en que nuestra tienda Java implementaría su proyecto sería hacer lanzamientos regulares de la capa de servicio, luego hacer que las capas de presentación dependan de la última versión. Hay espacio para la discusión sobre esto, pero ciertamente nos funciona. Tendríamos la interfaz web y las interfaces REST como proyectos Maven separados, ya que normalmente viven en diferentes archivos .war y, por lo tanto, requieren una implementación separada.
Por cierto, reforzaría la necesidad de ponerme al día con las herramientas de gestión de dependencia y compilación. Una vez que su proyecto crezca a un tamaño razonable, los necesitará. Las herramientas gratuitas como Maven, Jenkins y Nexus hacen que la administración de versiones sea menos problemática.
fuente