Отдельный DTO для публикации и размещения запроса и вложенного JSON в качестве пост-модели - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть два вопроса о RESTful api.

1. Можем ли мы иметь отдельный DTO для запроса GET, POST и PUT? Является ли это хорошей практикой
или я могу создать один абстрактный класс с общими свойствами, а затем наследовать его?

2. Является ли отправка вложенного json-запроса в POST хорошей практикой?

Как и в следующей статье:
https://code -maze.com / net-core-web-development-part6 /

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019
  1. Можем ли мы иметь отдельный DTO для запроса GET, POST и PUT?

DTO не создаются на основе типа запроса, вместо этого DTO создаются для сущностей,Например, у вас есть объект Customer, для объекта Customer вы создадите Customer DTO, и тот же Customer DTO может использоваться для запросов GET, POST и PUT объекта Customer.

Могу ли я создать один абстрактный класс с общими свойствами, а затем наследовать от него?

Да, вы можете использовать наследование при создании ваших DTO, но я бы сказал, что это более сложная задача без добавленной стоимостии имейте в виду, что наследование, если не используется должным образом, может увеличить сцепление в системе.

Является ли отправка вложенного json в POST-запросе хорошей практикой?

Как отметил Крис в своем ответе, если у вашего объекта есть вложенный объект, то ваш JSON будет иметь вложенный JSON,

0 голосов
/ 01 ноября 2019
  1. Да, и более конкретно, вы должны . DTO - это представление определенной группы данных в определенном сценарии. Эти данные могут и будут отличаться для разных типов запросов. Каждый раз, когда передаются разные данные, должен быть другой DTO для их представления.

    Вы можете использовать наследование, если хотите, и это имеет смысл. Однако имейте в виду, что из-за того, как работает связывание моделей, вам все равно придется использовать ваши конкретные, производные классы в качестве параметров, а не какой-то базовый класс. Связыватель модели будет создавать экземпляр класса, заданного параметром (поэтому он не может быть абстрактным), связывать любые значения запроса, представленные в этом классе, и отбрасывать остальные. Поэтому, если вы связываетесь с BaseClass, все, что у вас будет - это BaseClass, а не DerivedClass, даже если тело запроса было представлением DerivedClass. Если затем вы попытаетесь снизить значение до DerivedClass, все свойства, специфичные для DerivedClass, будут иметь значение null / default.

  2. Это не является ни хорошей, ни плохой практикой. JSON - это формат представления объекта. Если ваш объект имеет вложенные объекты, то ваш JSON будет иметь вложенный JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...