Ресурс весной HATEOAS заменяет DTO? - PullRequest
0 голосов
/ 12 июня 2019

Я создаю REST API весной.Так что до сих пор у меня есть только услуги чтения (GET).Для этого я использовал Spring HATEOAS для добавления ссылок, ссылающихся на дочерние элементы.

Теперь я хочу добавить несколько пишущих REST-сервисов.Обычно DTO используются в REST-сервисах и затем сопоставляются с моделью домена.

Итак, мой вопрос: можем ли мы просто использовать ресурсы из Spring HATEOAS, как в примере ниже, и обходиться без DTO?Или ресурсы предназначены для чего-то другого, а мне все еще нужны DTO?

@PostMapping
public ResponseEntity<String> saveProduct(@RequestBody ProductResource product) {
  ...
}

1 Ответ

2 голосов
/ 12 июня 2019

Я бы сказал, что Spring HATEOAS не заменяет DTO: он основан на DTO. Таким образом, вы можете сделать свой класс DTO расширенным ResourceSupport или заключить его в Resource<T>.


Модели, представляющие домен вашего приложения, и модели, представляющие данные, обрабатываемые вашим API , являются (или, по крайней мере, должны) различными проблемами и должен быть отделен друг от друга. Вы не хотите ломать свои клиенты API, когда добавляете, удаляете или переименовываете поле из модели предметной области приложения.

Пока ваш сервисный уровень работает с моделями домена / персистентности, ваши контроллеры API должны работать с другим набором моделей. Например, по мере развития моделей вашего домена / персистентности для поддержки новых бизнес-требований вы можете захотеть создать новые версии моделей API для поддержки этих изменений. Вы также можете отказаться от старых версий API по мере выпуска новых версий. И это вполне возможно достичь, когда вещи отделены.

Чтобы свести к минимуму стандартный код преобразования модели предметной области в модель API (и наоборот), можно полагаться на такие платформы, как MapStruct . И вы также можете рассмотреть возможность использования Lombok для генерации методов получения, установки, equals(), hashcode() и toString() для вас.

...