Я будую API REST, щоб відкрити більшість функціональних можливостей існуючого Java API. Обидва API призначені для внутрішнього використання в моїй організації; Мені не доводиться проектувати для зовнішнього використання. Я маю вплив на обидва API, але я реалізую REST. API API і надалі буде використовуватися для локальних додатків (він не "звільнений"), але API REST буде використовуватися для значних нових розробок.
Деякі з класів Java API - це просто дані (боби з властивостями, getters, setters). І принаймні деякі з них мають сенс передавати (у якійсь формі) через API REST у вигляді даних (які будуть переведені на XML або JSON). Наприклад, клас, який зберігає інформацію про серверну машину. Я стикаюся з наступним вибором для цих класів даних: чи ...
- відкрийте оригінальний клас Java (або підклас) безпосередньо в API REST, або
- створити новий клас передачі даних (шаблон DTO) спеціально для API REST?
У будь-якому випадку у мене будуть класи передачі даних REST; питання полягає в тому, анотувати анотацію оригіналів чи створити нові (які можуть бути поблизу копій оригіналів). Можуть бути й інші варіанти, але я зупинюся переважно на цих двох.
Аргументи для №1:
- СУХИЙ (не повторюй себе)
- Швидше здійснити
- Простіше оновити API REST
Аргументи для №2:
- Що робити, якщо REST API потрібно розробити окремо від Java API? (Це дещо ймовірно.)
- Що робити, якщо в класах даних Java є значні зміни, такі як видалення властивостей, додавання поведінки або зміни в ієрархії класів? (Це також є дещо ймовірним.)
Підсумок полягає в тому, що це здається компромісом між DRY (# 1) та роз'єднанням (# 2).
Я схиляюся до початку №1, а потім, якщо виникають проблеми з переходом до №2 пізніше, слідуючи спритному керівництву не будувати те, що ви не можете довести, що вам потрібно. Це погана ідея; чи варто починати з №2, якщо я думаю, що я все-таки можу закінчитися там?
Чи відсутні в моїх списках основні аргументи / наслідки?