Частый спор про изменение объекта по API — это как передавать данные. Я встерчал 3 подхода:
• передавать полностью весь объект
• передавать только поля, которые нужно изменить
• отдельные API для изменения конкретных полей объекта
Кто напишет про GraphQL, gRPC и др., тот хрюшка.
Для варианта передачи только полей, которые изменились, нужна какая-то обвязка. В Python сейчас стандарт — Pydantic. Раньше мы мучались с тем, как обрабаывать
None, а сейчас есть foo.model_dump(exclude_unset=True). И вроде как всё ок, но это только Python.Оказывается, есть стандарт — https://jsonpatch.com/. Но и в нём есть, к чему придраться — это то, как указывается путь до ключа
path, который напоминает unix-овые пути. А ведь уже есть несколько других стилей:• JSONPath (самый очевидный)
• jq (самый хипстерский)
• JSON Path Expressions в SQL (самый занудный)
• JSONata (не то, чтобы стиль, но заслуживает внимания)
Короче, я хочу JSONPatch, который использует JSONPath для путей.
С другой стороны это мелочи по сравнению с тем, что операции в JSONPatch — это по сути история изменений объекта, которую можно хранить, не храня снапшоты объектов. (вспоминаю django-reversion)