Django: Проект использует данные из REST API. Как использовать внешние приложения в этой системе? - PullRequest
8 голосов
/ 13 февраля 2012

У меня есть веб-интерфейс Django, который использует данные из интерфейса REST API. Даже пользователи сделаны и созданы на бэкэнде.

Моя проблема:

  • Как использовать сторонние приложения в этой системе, которые сильно зависят от моделей django / ORM ?
  • Есть ли что-то, что может обеспечить какой-то мост между REST API ресурсами и ORM?

Как можно решить эту проблему?

Обновление

DRY Принципал, кажется, терпит неудачу в этой ситуации.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2012

Я не уверен, что полностью понимаю ваш вопрос или требования. Насколько я понимаю, у вас есть основной сервер, который по сути является черным ящиком, и вы хотите использовать в своем проекте сторонние приложения, использующие Django ORM.

Мне неясно, почему возникнет необходимость в двусторонней синхронизации между двумя хранилищами данных. Пользователям вашего проекта будут возвращены данные из вашего основного сервера и из ORM проекта.

Поскольку вы обеспокоены сохранением данных "ORM" в своем основном бэкэнде, возможно, вам следует подумать о создании промежуточного программного обеспечения для транзакций, которое будет запускать каждый раз при обновлении данных ORM, что может сериализовать сохраняемую структуру и передавать ее в ваш REST API. Я полагаю, что этот REST API способен принимать произвольные структуры данных?

Возможно, вы, по крайней мере, захотите использовать некоторую форму промежуточного программного обеспечения и, возможно, вспомогательный модуль / класс, чтобы помочь сформировать "мост".

0 голосов
/ 15 июня 2017

Возможно, что-то изменилось с тех пор, как этот вопрос был первоначально опубликован.Теперь в StackOverflow есть пара интересных связанных вопросов по этой теме.

Чтобы написать решение, как описано в этом ответе , вы можете создать внешний слой службы (он же services.py)) и напишите там логику для доступа к внешним ресурсам.Ваши взгляды будут использовать этот слой и делать правильные действия.Есть и другие вопросы, которые помогают понять, как передать информацию из исходного запроса, полученного django-представлением, во внешнюю службу, например this или this

* 1011также приложение django, которое учитывает эту ситуацию, как объяснено в этом ответе . django-roa использует для решения этой проблемы парадигму Resource-Oriented Architecture *1017*.
0 голосов
/ 26 февраля 2012

Я столкнулся с аналогичным препятствием в новом проекте электронной коммерции.Проект является интерфейсом полноценного программного обеспечения для управления магазином (CMS + ERP + CRM).Он должен использовать основную базу данных продуктов, но иметь свои собственные записи для обзоров продуктов, оценок и т. Д.

Первоначально предполагалось создать кэшированную копию основной базы данных.Веб-сайт выиграет от быстрого времени загрузки кэшированных элементов, но реализация не является тривиальной.

После некоторых соображений выбранный подход обновлял базу данных веб-сайта из программы управления.Таким образом, копия веб-сайта всегда будет правильной, и большая часть реализации не должна беспокоиться об услугах REST (она все равно будет использоваться для регистрации пользователей, отслеживания поставок и т. Д.)

В вашем случае,там, где служба не может обновлять свою базу данных удаленно, вам необходим механизм, который позволяет ссылаться на ресурсы REST, как обычные модели, и кэширует их в фоновом режиме.

Важное примечание: найдите способ убедиться, что кэш всегда корректен (не загрязнен) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...