Estou criando uma API REST para expor a maioria das funcionalidades de uma API Java existente. Ambas as APIs são para uso interno dentro da minha organização; Não preciso projetar para uso externo. Eu tenho influência sobre as duas APIs, mas estou implementando a REST. A API Java continuará sendo usada para aplicativos locais (não está sendo "aposentada"), mas a API REST será usada para novos desenvolvimentos significativos.
Algumas das classes da API Java são simplesmente dados (beans com propriedades, getters, setters). E pelo menos alguns deles fazem sentido transmitir (de alguma forma) pela API REST como dados (que serão empacotados para XML ou JSON). Por exemplo, uma classe que armazena informações sobre uma máquina servidor. Sou confrontado com a seguinte opção para essas classes de dados: Eu ...
- expor a classe Java original (ou uma subclasse) diretamente na API REST, ou
- criar uma nova classe de transferência de dados (padrão DTO) especificamente para a API REST?
De qualquer maneira, terei classes de transferência de dados REST; a questão é se deve anotar os originais ou criar novos (que podem estar próximos das cópias dos originais). Pode haver outras opções, mas vou me concentrar principalmente nessas duas.
Argumentos para o 1:
- SECA (não se repita)
- Mais rápida de implementar
- Mais fácil de atualizar a API REST
Argumentos para o # 2:
- E se a API REST precisar ser versionada separadamente da API Java? (Isso é um pouco provável.)
- E se houver alterações significativas nas classes de dados Java, como remoção de propriedades, adição de comportamento ou alterações na hierarquia de classes? (Isso também é um pouco provável.)
A conclusão é que parece uma troca entre DRY (# 1) e desacoplamento (# 2).
Estou inclinado a começar com o número 1 e, se surgirem problemas, passar para o número 2 mais tarde, seguindo a orientação ágil de não criar o que você não pode provar que precisa. Isso é uma má ideia; devo começar com o número 2 se acho que posso acabar lá de qualquer maneira?
Existem argumentos / consequências importantes ausentes nas minhas listas?