Sou relativamente novo em termos de habilidades de desenvolvimento web em Java. Eu tenho um projeto que acho que seria um bom candidato para um serviço RESTful do pouco que eu entendo sobre APIs. Estou tentando entrar em detalhes de como isso deve ser estruturado, mas não estou realmente chegando a lugar algum em termos de pesquisas no Google e lendo o material que já tenho. Espero que este post traga alguma validação e / ou redirecionamento em termos de meu conhecimento e suposições sobre este tópico.
Minha suposição atual é que meu serviço RESTful terá a seguinte estrutura:
- Dados do banco de dados (SQL).
- Um ORM (estou usando um ORM relativamente impopular chamado CPO, mas isso seria substituído pelo Hibernate pela maioria das pessoas).
- Uma classe de gerenciador Java com métodos que conversam com o ORM para obter os dados
- Uma classe / classes de controlador Java que manipula o mapeamento de solicitações e usa
@ResponseBody
para direcionar / manipular a URL e as ações de como os dados são manipulados por verbos HTTP ( http://mysite.com/computers/dell pode serGET
solicitada com a palavra "dell" sendo o URL um parâmetro que retornará uma matriz JSON de informações sobre computadores da dell). - Esse serviço deve ser feito com o Spring Boot ou, de alguma forma, poder ficar sozinho e ser independente de qualquer outro aplicativo.
Agora, assumindo que o exposto acima está correto, eu teria (em um nível muito básico) um serviço RESTful que qualquer aplicativo pode usar para consumir e usar dados.
Digamos que eu tenha meu aplicativo da web. Digamos que eu esteja criando um aplicativo Web sobre informações de hardware de computador e usando o Spring para criar esse aplicativo Web. Aqui estão minhas suposições:
- Eu teria várias visualizações como JSPs, com as JSPs com HTML, CSS e JavaScript incluídas. O JavaScript manipularia chamadas AJAX para o controlador deste aplicativo, conforme necessário (abaixo).
- Esse aplicativo da Web também teria seu próprio controlador para lidar com as solicitações e o roteamento de URL do aplicativo, e o controlador usaria, digamos, o
ModelAndView
objeto ou algo nesse sentido para "conversar com" o controlador do serviço RESTful, obter os dados que estão sendo passados , passe esses dados de volta para a exibição (Javascript, JSP, etc ...) para exibição.
Estou no caminho certo, aqui? Entendo que também há um aspecto de autenticação nos serviços RESTful, mas ainda não estou lá conceitualmente (e meu projeto será usado em uma rede privada, portanto a segurança não é uma prioridade neste momento).
Qualquer insight, crítica, conhecimento, feedback ou esclarecimento é muito apreciado.
@Autowire
irá funcionar como resultado.Ao concordar com a maioria das respostas do @ Minjun.Y, acho que adotaria uma abordagem um pouco diferente da camada REST e da página da Web. Pela minha leitura da sua pergunta, acho que você deseja expor uma interface da Web e uma interface REST ao mundo externo. Há pouco a ganhar com a leitura de POJOs do banco de dados, transformando os dados em JSON e, em seguida, novamente em POJOs para consumo por JSPs.
Eu preferiria que a camada de serviço fizesse todo o trabalho real e adicionasse camadas de "apresentação" separadas para o aplicativo Web (JSPs) e o controlador REST. Esses seriam controladores separados, nos quais o serviço seria injetado. Como alternativa, escolha apenas um serviço REST e construa toda a lógica de apresentação no lado do cliente, conforme a resposta anterior.
Além disso, eu não sou um grande fã dos módulos Maven. A maneira como nossa loja Java implementaria seu projeto seria fazer lançamentos regulares da camada de serviço e depois tornar as camadas de apresentação dependentes do lançamento mais recente. Há espaço para discussão sobre isso, mas certamente funciona para nós. Teríamos a interface da web e as interfaces REST como projetos Maven separados, pois eles normalmente vivem em arquivos .war diferentes e, portanto, exigem implantação separada.
BTW, eu reforçaria a necessidade de atualizar as ferramentas de gerenciamento de compilação e dependência. Depois que seu projeto crescer para um tamanho razoável, você precisará deles. Ferramentas gratuitas como Maven, Jenkins e Nexus tornam o gerenciamento de versões menos um problema.
fonte