Preciso desenvolver um servidor Rest, e estive lendo um pouco a respeito.
Estou com as seguintes dúvidas:
Usar Spring-data-rest ou Spring-Jersey? (Devo usar spring-boot)
Atualmente, melhor ainda é fazer uso de Dtos, ou expor toda a classe?
Hateos Substitui o Dto, ou deveria usar os 2 em conjunto?
Um exemplo de retorno, seria Nota Fiscal… devo retorna o cabeçalho da nota e os itens… só que nos itens só retornaria codigo e nome do item… (Meu caso é outro tipo de retorno, mas este exemplo torna mais claro)
Você pode usar o DTO pra transferir dados da camada de acesso a dados pra camada da aplicação. Mas se as camadas não são separadas perde o sentido de usar DTO ne mesmo?
1 - eu nunca usei estas tecnologias mas o Spring-data-rest você pode expor uma consulta direta no banco. Spring-Jersey deve ser uma integração spring-jersey , nunca trabalhei. Não necessariamente você vai precisar do spring-boot para rodar estas libs, mas ajuda já que inclui o spring.
2 - Melhor vc usar dto para manter o serviço desacoplado do core domain e expor somente o nescessário.
3 - O legal é usar Hateos e Dto, mas se não for usar o conceito hipermídia o Hateos não vai te ajudar muito.
Não se prenda muito a siglas, foque mais no negócio. Você deve retornar o que uma determinada funcionalidade precisar. Se para o cliente no momento a funcionalidade só necessita do código e nome nos itens, então é exatamente isso que você deve selecionar na sua fonte de dados e retornar no seu serviço.
Como o pessoal comentou antes, é melhor retornar, sempre que possível, um DTO com as informações que são necessárias para o serviço, e melhor ainda se conseguir realizar consultas na camada de persistência que retornem as informações necessárias para preencher o DTO que será retornado, assim evita até de recuperar um monte de informações do banco e retornar um ou dois atributos, melhorando até o desempenho do serviço.
No caso de Hateoas, se os seus serviços possuírem uma navegabilidade entre eles, eu recomendo, pois facilita muito para quem consumir os serviços saber quais são os possíveis próximos serviços que podem ser chamados.
Quanto as tecnologias a utilizar para desenvolver os serviços Rest, uso bastante Spring-Boot, facilita bastante a criação do projeto.