Существует ли более чистый способ обработки частичного обновления, который включает отношения один-ко-многим, отношения многие-ко-многим и т. Д.
Трудно сказать - это зависито том, какая часть работы доставляет вам неприятности.
PATCH
и, аналогично, PUT
, экспресс-семантика редактирования документов - в обоих случаях мы просим, чтобы сервер сделал представление некоторого ресурсасоответствует представлению клиента.
I GET /foo
, и вы, в свою очередь, отправляете мне документ json объемом 1 ГБ.Я загружаю этот документ в редактор json и исправляю одну или две орфографические ошибки.Поскольку изменения невелики, я мог бы отправить вам запрос PATCH, а не отправлять обратно 1 ГБ json.Это означает, что я создам представление своих правок в каком-либо типе носителя, который вы и я понимаем, и отправлю вам это представление.
application / json-patch + json может бытьХорошая отправная точка.
Хорошая вещь в использовании стандартов заключается в том, что большая часть работы уже сделана для вас.Но вместо этого вы могли бы разработать собственную схему документа исправления, если бы у вас была такая склонность, и опубликовать ее, и любой клиент, который понимал вашу схему, мог бы взаимодействовать с вами.
Обратите внимание, что все это происходит вдомен "передача документов по сети".Здесь ничего не происходит, что подразумевает, что клиент знает, что существует объектная модель, или таблицы реляционной базы данных, или какая-либо другая деталь реализации, подобная этой.Это просто проблема сервера.
Конечно, вторая часть проблемы сейчас: вот я, сервер с патч-документом и одиннадцатью таблицами в моей реляционной базе данных, которые могут нуждаться в обновлении.Как это происходит?Как отметил Джон, это работа, которую необходимо выполнить.Один из возможных ответов в мире Java / Spring / Hibernate заключается в том, что вы можете загрузить текущее состояние серверной части через ORM, использовать патч для направления изменений в локальную структуру данных в памяти, а затем попросить ORM выяснить, чтооператоры должны быть выполнены.