Estoy creando una API REST para exponer la mayor parte de la funcionalidad de una API Java existente. Ambas API son para uso interno dentro de mi organización; No tengo que diseñar para uso externo. Tengo influencia sobre ambas API pero estoy implementando la REST. La API de Java continuará utilizándose para aplicaciones locales (no está "retirada"), pero la API REST se utilizará para un nuevo desarrollo significativo.
Algunas de las clases API de Java son simplemente datos (beans con propiedades, captadores, establecedores). Y al menos algunos de estos tienen sentido transmitir (de alguna forma) a través de la API REST como datos (que se ordenarán en XML o JSON). Por ejemplo, una clase que almacena información sobre una máquina servidor. Me enfrento a la siguiente opción para estas clases de datos: Do I ...
- exponer la clase Java original (o una subclase) directamente en la API REST, o
- hacer una nueva clase de transferencia de datos (patrón DTO) específicamente para la API REST?
De cualquier manera tendré clases de transferencia de datos REST; la pregunta es si hacer anotaciones en los originales o crear nuevos (que pueden ser copias cercanas de los originales). Puede haber otras opciones, pero me enfocaré principalmente en esas dos.
Argumentos para el # 1:
- SECO (no te repitas)
- Más rápido de implementar
- Más fácil de actualizar API REST
Argumentos para el # 2:
- ¿Qué sucede si la API REST necesita ser versionada por separado de la API Java? (Esto es algo probable).
- ¿Qué sucede si hay cambios significativos en las clases de datos de Java, como la eliminación de propiedades, la adición de comportamiento o cambios en la jerarquía de clases? (Esto también es algo probable).
La conclusión es que parece una compensación entre DRY (# 1) y desacoplamiento (# 2).
Me inclino por comenzar con el n. ° 1 y luego, si surgen problemas para pasar al n. ° 2 más adelante, siguiendo la guía ágil de no construir lo que no puede demostrar que necesita. Es una mala idea; ¿Debo comenzar con el # 2 si creo que puedo terminar allí de todos modos?
¿Hay argumentos / consecuencias importantes que faltan en mis listas?