Как реализовать функционал отмены последних изменений в определенных CRUD эндпоинтах с использованием FastAPI?
Я создаю веб-приложение с использованием FastAPI и мне нужно реализовать функционал отмены последних изменений на определенных CRUD эндпоинтах. Я бы хотел узнать, как это можно сделать и какие технологии можно использовать для достижения этой цели.
Я уже изучил документацию FastAPI и не нашел встроенного функционала для отмены изменений. Я также искал информацию в Интернете, но не нашел решения, которое бы мне подходило.
Моя текущая идея заключается в создании отдельной таблицы в базе данных, которая будет хранить историю изменений и позволять откатывать изменения в нужный момент. Я не уверен, насколько это эффективно и безопасно, поэтому хотел бы услышать советы и рекомендации от опытных разработчиков.
Какие технологии и методы можно использовать для реализации этого функционала? Какие есть лучшие практики и подходы к решению этой задачи? Буду благодарен за любую помощь!
Всё правильно, так и надо делать. Никаких специальных технологий не существует. Просто реализуете эндпоинт, который будет управлять откатом на нужное число действий, журнал действий и механизм, который будет возвращать состояние на момент той илииной записи в журнале.
Никакой специфики, связанной с применением FastAPI тут нет.
Я правильно понимаю, что реализация функционала отмены изменений через создание отдельной таблицы в базе данных является наиболее предпочтительным подходом? Будет ли этот подход медленным при обработке больших объемов данных?
beginer0, в лоб, мне думается, это хорошо не решить.
Вероятно, встанет вопрос консистентности данных, сохранности других изменений при откате части данных. Также встанет вопрос об обработке запросов и инсертов/апдейтов к откатываемому фрагменту в период отката.
В общем, горячиться тут не надо.
А если это большие объемы и наверное хайлоад… страаашно.
beginer0, ну ты можешь попробовать event sourcing, т.е. хранить сведения в виде журнала изменений + снапшоты на определённый момент. Тогда откат изменений будет эквивалентен удалению всех событий и снапшотов после определённой даты. Разумеется, этот откат будет эквивалентен полному откату системы. Частичный откат возможен, но тут проблема будет с взаимосвязанными сущностями - как определить сущности, чьи изменения надо тоже откатить.