Я пытаюсь вытащить аналогичные данные из нескольких сторонних API, все из которых имеют слегка меняющиеся схемы и конвертируют их все в единую схему для хранения в БД и выставляют через унифицированный API. Это на самом деле переписывание системы, которая уже делает это, минус хранение в БД, но которую трудно проверить и не очень элегантно. Я решил, что обращусь к сообществу с некоторой мудростью. Вот некоторые мысли/чего я хотел бы достичь.Преобразование и унификация данных API в Python
- Простой способ указания сопоставлений схем из внешней схемы API-интерфейсов во внутреннюю схему. Я понимаю, что некоторые нюансы в данных могут быть потеряны путем преобразования в единую схему, но это жизнь. Это сопоставление схемы может быть нелегким делом и, возможно, излишним из академических документов, которые я нашел по этому вопросу.
- Альтернативным решением было бы позволить третьим сторонам разрабатывать интерфейсы для внешних API. Качество кода этих третьих лиц может быть или не быть известно, но может быть установлено путем тщательных испытаний.
- Поэтому система должна быть легко протестирована, я думаю, издеваясь над внешними вызовами API, чтобы иметь воспроизводимые данные и гарантировать правильность обработки и преобразования.
- Один из внешних интерфейсов API-интерфейсов не должен разрушать остальные.
- Некоторая схема проверки/способ обнаружения, если внешние схемы API были изменены без предупреждения
- Это будет интегрировано в проект Django, поэтому его можно было бы записать в виде приложения Django, которое, вероятно, сделает блок и тестирование интеграции. С другой стороны, я хотел бы оставить его как можно более развязанным от Django. Хотя интерфейсы API должны знать, для какого формата нужно преобразовать, может ли это быть указано во время выполнения?
Я ничего не вижу в списке желаний? Нереально? Неправильный путь? Хотелось бы получить некоторые отзывы.
Я не уверен, есть ли проекты библиотек/ОС, которые уже выполняют некоторые из этих действий. Чем меньше колес я должен изобретать лучше. Может ли какая-то часть этого быть ценной в качестве проекта ОС?
В предыдущей версии я породил кучу потоков, которые обрабатывали бы отдельные запросы. Хотя я никогда не использовал его, мне сказали, что я должен смотреть на gevent как способ справиться с этим.
Это кажется слишком широким для SO. – tacaswell
@tcaswell Я мог бы разбить его на более мелкие куски, но они, вероятно, не имели бы смысла сами по себе – Andres