powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Rest Api nested object - best practice, есть ли?
9 сообщений из 9, страница 1 из 1
Rest Api nested object - best practice, есть ли?
    #39747951
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, привет.
Народ, подскажите направьте. Допустим, есть микросервисное приложение. Есть форма, на которой, можно создать узера.
На форме много вкладок, там и узер дату можно отметить, можно и детей его отметить, и паспорт и так далее. И по сабмиту,
вся эта гигантская ДТО летит на сервер.
Есть контроллер, который отрабатывает по определенному адресу и выполняет бизнес логику.
В одной из книг, подглядел прием который позволяет справляться с overfetching, например

GET /orders/1345?expand=consumer

Получив подобный запрос, я подтащу данные по order, а также consumer.

ОК, прием мне понравился, и с запросом GET вроде как вся понятно.
Но непонятно, как быть с POST запросом, в котором nested объекты.

Допустим, есть объект

Код: java
1.
2.
3.
4.
class User{
 var name:String
 var children : List<Children>
}



Есть контроллер :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@PostMapping("/")
fun createUser(user: UserDto) : ResponseBody<*>{
  
  userRepo.save(user) 
  
  if (user.hasChildren()){
   childrenRepo.save(user.getChildren)
  }

return ResponseBody(ok()).body(user.getId());
}


Мне вот что не нравится/непонятно, я проверяю DTO на наличие в ней children,
И глядя на аннотацию метода в контроллере @PostMapping("/"), я не могу четко сказать,
что он будет внутри делать, будет он сохранять только user, или user+children, или
user+children+other nested, а вот тут мне все понятно

GET /orders/1345?expand=consumer


Хочу узнать корректно, ли использование таких методов в контроллере, или может best практики подразумевают
передачу в боди еще каких-то данных, которые говорят что именно сохраняем, ну или в хедере чего-нибудь.
Например (случай когда в ДТО говорю что хочу сохранить):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@PostMapping("/")
fun createUser(user: UserDto) : ResponseBody<*>{
  
  userRepo.save(user) 
  
  for (PersistItem pItem: user.getPersistItems()){
    switch(pItem){
      "children"-> childrenRepo.save(user.getChildren)
      "passport"-> passportRepo.save(user.getPassport)
      "otherNestedData"->otherNestedDataRepo(user.saveOtherNestedData)
    }
  }
 
return ResponseBody(ok()).body(user.getId());
}



Или с хедерами

Код: java
1.
2.
3.
4.
@PostMapping("/")
fun createUser(user: UserDto, @RequestHeader("persistChildren") persistChildren: Boolean ) : ResponseBody<*>{
 //body
}



Подскажите плз лучшие практики, или где почитать, конкретно ответ на такой вопрос, не нашел. Или может я усложняю.
Или может,технология какая есть....Спасибо.
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39747959
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justcoder,
1. Можно прямо в dto добавить флаги поле isModified.
2. Можно каждый раз проверять отличие в ОРМ. Это его забота, не делать апдейт100 полей если сменился возраст.
За связями следит ОРМ.
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39748013
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по ресту имхо нет какого то жесткого стандарта. как кстати и по много чему еще. есть лишь набор рекомендаций и всё.
ИМХО тут скорее важно единообразие во всем (в рамках проекта) нежели, какое-то жесткое правило для всех приложений.

я например, апологет того что если ты делаешь гет-ордерс -- то надо отдавать всё включая вложенное. если тебе надо что то исключить - добавляешь что исключить. типа как квери ленгвидж где ты отдаешь всё если нет критериев и отдаешь по критериям если они есть (в случае гет ордерс -- их нет)

по постам аналогично. не пришли вложенные сущности - их не делаем.

по путам интереснее - тут либо что не пришло -- то налл. либо юзай метод патч. там обновит только то что пришло.

имхо
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39748146
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем. В принципе, выберу какой-то стиль и буду придерживаться. Может graphql прикручу.
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39748150
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Графкуэль не панацея. но тогда зачем рест?
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39748161
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justcoder,
Хороший стиль FullRest а намешивание технологий по желанию программиста это как раз отсутствие стиля.
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39748173
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я только по графкл пару презентаций просмотрел,
Особо в продукт не вникал. Из того, что увидел понравился.

Насчет намешивания, не соглашусь. Любая технология - инструмент. Я вообще гомогенных проектов не встречал. Инструмент решает задачу - юзай на здоровье.

Те же микросервисы, не рестом едины, там вам и рест и мат вью и мессэджинг и еластик - все есть инструменты.
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39748209
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justcoder,
Вот про микросервисы и анекдоты в сети.
Что все их пишут, но никто не видел.
Любишь прикручивать, прикручивай.
...
Рейтинг: 0 / 0
Rest Api nested object - best practice, есть ли?
    #39748415
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justcoderМожет graphql прикручу
Зачёт.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Rest Api nested object - best practice, есть ли?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]