Я пытаюсь создать REST API с ресурсами, связанными с другими, и теперь я сталкиваюсь с проблемой обновления этих вложенных ресурсов.
У меня есть два типа отношений. Во-первых, вложенный объект тесно связан с другим и нигде не используется, а другой тип заключается в том, что вложенный объект использует отдельно.
Методы GET, PUT, DELETE соответствующего ресурса уже есть в основных контроллерах, так как это стандарт REST.
Я не знаю, как лучше реализовать обновление REST для этих связанных объектов. Обновление связанного объекта должно полагаться на родительские службы или их собственные?
Я подумал, что если реляционный класс никогда не используется отдельно, не обязательно создавать для него отдельный сервис и контроллер, потому что он используется только в композиции со своим классом-владельцем, и все манипуляции должны выполняться через родительский контроллер, и наоборот, если он используется отдельно, должен иметь свой собственный контроллер, сервис и т. д.
class Foo {
private Bar bar;
}
class Bar {
private String someAttr;
}
Итак, метод обновления для атрибута bar
в классе Foo
должен быть в FooController
?
class FooController {
//... GET, PUT, DELETE implementations
@PatchMapping("/{fooId}/bar")
public ResponseEntity<Bar> update(@PathVariable Long fooId, @RequestBody Bar bar){
fooService.updateBar(fooId, bar);
}
}
Или это должно быть отдельно, а для обновления сущности следует использовать BarController
?
class FooController {
//... GET, PUT, DELETE implementations without update method that was shown below
}
class BarController {
//... GET, PUT, DELETE implementations
@PatchMapping("/bars")
public ResponseEntity<Bar> update(@RequestBody Bar bar){
barService.update(bar);
}
}