Когда мы работаем над RESTful API, тело запроса и тело ответа - это общие термины, которые мы слышим каждый день. Говоря о теле запроса-ответа, мы обычно сериализуем и десериализуем это тело в объектный класс. Вопрос в том, что это за класс? Класс сущности или класс DTO?
В этом руководстве в качестве примера я использую Spring Boot.
Разные
«DTO или Data Transfer Objects - это объект, который переносит данные между процессами. Мотивация для его использования заключается в том, что связь между процессами обычно осуществляется с использованием удаленных интерфейсов (например, веб-служб), где каждый вызов является дорогостоящей операцией ».
Класс сущности - это класс объекта, который представляет сущности вашей базы данных, обычно мы используем для целей ORM.
DTO дает нам возможность скрыть нашу сущность от клиента, использующего API, и помогает нам поддерживать наш код, если мы хотим изменить нашу внутреннюю структуру базы данных. Кроме того, если вы работаете с большим количеством разработчиков, вы можете использовать DTO как библиотеку. Может быть, это будет легко в начале разработки, если мы будем использовать класс сущности в качестве параметра в контроллере, но, судя по моему опыту, это заставит вас страдать в середине разработки из-за большого количества изменений.
Например, когда нам нужно добавить новый столбец (name: created_date) в нашу базу данных, мы должны добавить новый атрибут (name: createdDate) в наш класс сущности, потому что нам нужно для записи времени создания записи, но клиент, использующий наши API, не должен читать и записывать этот столбец. DTO может помочь вам скрыть createdDate от клиентов, и мы можем поддерживать правила.
Класс DTO и класс Entity несут разную ответственность. НЕ относите более одной ответственности к одному классу.
Руководство
source code: https://github.com/adrianaden/spring-boot-starter
Цели: мы создадим автоматический конвертер из DTO в Entity и позаботимся о том, чтобы уровень контроллера оставался простым и понятным 😎
DTO.java
создать аннотацию для объявления класса
RequestDTO.java
создать аннотацию @RequestDTO для объявления тела, а значение - класс DTO
Процессор и конфигурация
Это самый важный класс, этот класс преобразует DTO в класс сущности. На самом деле мне нужно унаследовать класс, используемый @RequestBody от Spring Boot, и переопределить какой-либо метод.
зарегистрируйтесь как преобразователь аргументов в вашем классе конфигурации
Реализация
Замените @RequestBody на @RequestDTO, и мы все равно получим очень чистый контроллер :)
Готово, я надеюсь, что мой учебник может помочь вам, пожалуйста, дайте мне знать, если у вас есть какие-либо материалы или вопросы. сайонара…