Как в Django сделать синхронизация с веб сервисами?
как на django правильно организовать синхронизацию данных с веб сервисом по api?
Например есть сервис yclients, там список клиентов и врачей, получать их мы можем по определённым ручкам api.
Как правильно реализовать синхронизацию?
Просто requests получить данные и в классе каком то в цикле проходить и обновлять или добавлять через django orm или использовать сериализатор или django resource как то приспособить, какой инструмент вообще лучше применить более удобный и правильный?
Что вы обычно делаете после requests когда получили данные с api?
Ну каким образом, в цикле проходитесь и в orm уже через bulk сохраняйте, просто хочется более гибко и удобно сделать, а когда у тебя много всякого вложенного это уже трудно понимать и уже другой разработчик будет капаться изучать весь этот код
Everything_is_bad, мое решение работает, просто хочу улучшить свои навыки понимать как сделать "правильно", просто мне кажется это немного колхозный способ и есть что то более специализированное для сохранения таких вложенных массивов структур с более эффективным по времени нагрузке и поддержке. Сейчас в международную компанию устраиваюсь из мелкой местной, хотел как то соответствовать
mcrack25, ну так никто не угадает что ты сделал и как лучше ..
Пока вы не выложите код, который могут посмотреть и что-то посоветовать..
....Хотя говорят на форуме есть тайный телепат, он прям по фото мысли читает, попробуй фото головы добавить, а лучше томографию мозга тогда он сможет все ваши идеи понять и улучшить без слов...
for item in requests.get('/url/get/list/clients/').json():
Client.objects.get_or_create(somefield=item['field'], someotherfield=item['someotherfield'], ...)
Если это разовая акция, которая не нужна в коде приложения, я запускаю юпитер нотебук с джангой (django-shell-plus), пишу скрипт который получает, парсит и загружает данные (все это на тестовой бд), и когда уверен в коде прогоняю скрипт с продакшн базой. Если это периодический процесс, то можно данный функционал внедрить в приложение джанго.
mcrack25, так обычно и делается, тогда лишь дополню предыдущие ответы, нужно не забыть отловить возможные ошибки при работе со сторонним апи и при работе с собственной бд.
mcrack25, у тебя типовая задача синхронизации с внешним ресурсом и типовое решение через таску в планировщике, архитектурно улучшать (из твоего описания) нечего, а структурно в программном коде - без самого кода нет смысла обсуждать. Накрутить можно много чего, но нужно ли?
Если у тебя пачка однотипных запросов, то внутри таски можно или тредпулл использовать или какой-нибудь асинхронный клиент httpx, либо пораждать дополнительные таски. Но всё это имеет смысл, если не устраивает текущая скорость получения данных.
Так то у меня и так то таска работает и раз в 5 минут выполняет таску, просто она такая запутанная, много вложенного всего сделанное с помощью одного класса синхронизации и методы, которые сохраняют какие то вложенные вещи, уровень вложенотсти где то 3 таблицы.
Например создаётся пользователь, у пользователя создаётся профиль, у профиля добавляется ещё одна таблица с профилями от двух филиалов.
Хотелось более прозрачную структуру, чтобы сразу было понятно что во что сохраняется и что сохраняется внутри вложенного объекта, это только 3 уровня вложенности, а если их будет 5-6 наверно вообще что то непонятное будет.
Поэтому подумал, что возможно такие штуки с помощью сериализаторов сохраняют, но все говорят что делают так же, по обычному с сохранением в классах и методах с использованием orm.
mcrack25, тут уже в помощь различные архитектурные паттерны, только учти, если все работает как надо, то можно и не трогать)
еще сложный код можно покрыть автотестами чтобы спокойней было, и другим разработчикам легче понять будет, если придется работать с этим кодом