2013-04-05 3 views
0

Я пытаюсь вытащить аналогичные данные из нескольких сторонних API, все из которых имеют слегка меняющиеся схемы и конвертируют их все в единую схему для хранения в БД и выставляют через унифицированный API. Это на самом деле переписывание системы, которая уже делает это, минус хранение в БД, но которую трудно проверить и не очень элегантно. Я решил, что обращусь к сообществу с некоторой мудростью. Вот некоторые мысли/чего я хотел бы достичь.Преобразование и унификация данных API в Python

  • Простой способ указания сопоставлений схем из внешней схемы API-интерфейсов во внутреннюю схему. Я понимаю, что некоторые нюансы в данных могут быть потеряны путем преобразования в единую схему, но это жизнь. Это сопоставление схемы может быть нелегким делом и, возможно, излишним из академических документов, которые я нашел по этому вопросу.
  • Альтернативным решением было бы позволить третьим сторонам разрабатывать интерфейсы для внешних API. Качество кода этих третьих лиц может быть или не быть известно, но может быть установлено путем тщательных испытаний.
  • Поэтому система должна быть легко протестирована, я думаю, издеваясь над внешними вызовами API, чтобы иметь воспроизводимые данные и гарантировать правильность обработки и преобразования.
  • Один из внешних интерфейсов API-интерфейсов не должен разрушать остальные.
  • Некоторая схема проверки/способ обнаружения, если внешние схемы API были изменены без предупреждения
  • Это будет интегрировано в проект Django, поэтому его можно было бы записать в виде приложения Django, которое, вероятно, сделает блок и тестирование интеграции. С другой стороны, я хотел бы оставить его как можно более развязанным от Django. Хотя интерфейсы API должны знать, для какого формата нужно преобразовать, может ли это быть указано во время выполнения?

Я ничего не вижу в списке желаний? Нереально? Неправильный путь? Хотелось бы получить некоторые отзывы.

Я не уверен, есть ли проекты библиотек/ОС, которые уже выполняют некоторые из этих действий. Чем меньше колес я должен изобретать лучше. Может ли какая-то часть этого быть ценной в качестве проекта ОС?

В предыдущей версии я породил кучу потоков, которые обрабатывали бы отдельные запросы. Хотя я никогда не использовал его, мне сказали, что я должен смотреть на gevent как способ справиться с этим.

+0

Это кажется слишком широким для SO. – tacaswell

+0

@tcaswell Я мог бы разбить его на более мелкие куски, но они, вероятно, не имели бы смысла сами по себе – Andres

ответ

0

Для вашего второго пункта вы должны указать Temboo. Temboo нормализует доступ к более чем 100 API-интерфейсам, что означает, что вы можете поговорить со всеми, используя общий синтаксис на выбранном вами языке. В этом случае вы должны использовать Temboo Python SDK - доступно here.

(Полное раскрытие: я работаю в Temboo)

+0

Спасибо, но я не нашел ни одного из API, которые планировал использовать. Было бы полезно, однако, если бы вы могли поделиться тем, как вы с ними работаете – Andres

+0

Конечно. Короче говоря, мы создаем процесс для каждого вызова API, который позволяет нам абстрагироваться от различий, которые вы найдете в отдельных API, и предоставлять нашим пользователям единый интерфейс для огромного набора API. Наши SDK затем называют эти процессы, которые в свою очередь общаются с базовыми API. Этот уровень косвенности позволяет нам делать такие вещи, как преобразование формата ответа и более удобное управление ошибками/отчетность, что делает его более приятным для работы с API. –

Смежные вопросы