2012-02-13 3 views
8

私はREST APIバックエンドからのデータを消費するDjango Webフロントエンドを持っています。 ユーザーでも、バックエンドで作成および作成されます。Django:REST APIからのプロジェクト消費データ、このシステムでの外部アプリの使用方法

私の問題:

  • がどのようにこのシステム内でサードパーティのアプリを使用するには、多額のジャンゴモデル/ ORMに依存?
  • REST APIリソースとORMの間に何らかの橋渡しをすることができるものはありますか?

この問題はどのように処理できますか?

更新

DRY校長はこのような状況で失敗しているように見えます。

+2

これは価値があるため、私はこれを行うための良い(またはそれほど良いことではない)方法を認識していません。 –

+0

この状況の解決方法をアドバイスできる人がいるかどうかを確認してください。 –

+0

はい、解決策があればそれを見ることに興味があります。 –

答えて

-3

私は、私は完全にあなたの質問や要件を理解していません。私が読んでいるところでは、基本的にブラックボックスのプライマリバックエンドがあり、Django ORMを使用するサードパーティのアプリケーションをプロジェクトで使用したいとします。

2つのデータストアの間で双方向の同期を取る必要がある理由は不明です。プロジェクトのユーザは、プライマリバックエンドとプロジェクトのORMから返されるデータになります。

"ORM"データをプライマリバックエンドに保存することに懸念があるため、ORMデータが更新されるといつでも実行されるトランザクションミドルウェアを作成することを検討します。保存する構造をシリアル化して送信するREST APIに追加します。このREST APIは、任意のデータ構造を受け入れることができると思いますか?

あなたはおそらく、少なくとも「ブリッジ」を形成するために役立ついくつかのmiddlewareの形、そしておそらくユーティリティモジュール/クラスを使用することをお勧めします。

+0

Hm ..ビューの前後でミドルウェアが動作します。しかし、DB呼び出しは一般的にビューで行われるため、ミドルウェアはどのように魔法を行うことができますか? –

+0

@ YugalJindle、TransactionMiddlewareを使用してください。 https://docs.djangoproject.com/en/dev/topics/db/transactions/も参照してください。 – imm

+0

興味深い。私はそれが役に立つと思う。 同様のブリッジ技術を使用してプロジェクトにリンクできますか? –

-2

私は新しいeコマースプロジェクトで同様の障害に直面しています。 プロジェクトは本格的な店舗管理ソフトウェア(CMS + ERP + CRM)のフロントエンドです。マスター製品データベースを使用する必要がありますが、製品のレビュー、評価などには独自のエントリがあります。

最初の考えは、マスターデータベースのキャッシュされたコピーを作成することでした。ウェブサイトはキャッシュされたアイテムの読み込み時間が速いことから利益を得るが、実装は簡単ではない。

いくつかの考慮事項の後で、選択されたアプローチは、管理プログラムからウェブサイトのDBを更新することでした。この方法では、ウェブサイトのコピーは常に正しいものになり、実装のほとんどはRESTサービスを心配する必要はありません(ユーザー登録や貨物追跡などに使用されます)

あなたの場合、サービスを自分のデータベースをリモートで更新することはできません。通常のモデルのようなRESTのリコースを参照できるようにするメカニズムを考え、バックグラウンドでキャッシュする必要があります。

重要な注意:キャッシュは常に(非汚れ)が正しいことを確認するための方法について研究...

+0

このようなソリューションを使って、いくつかのopensourceプロジェクトがありますか? –

0

おそらく、この質問はもともと掲載されているので変更されている可能性があります。今、このトピックに関するStackOverflowに関する興味深いいくつかの関連する質問があります。

in this answerのようにソリューションをコーディングするには、外部サービスレイヤー(別名services.py)を作成し、外部リソースにアクセスするためのロジックを書き込むことができます。あなたのビューはこのレイヤーを消費し、適切なアクションを行います。 in this answerを説明するように、アカウントにこのような状況を取るDjangoのアプリもありthisthis

のように外部サービスにジャンゴ・ビューで受信された元の要求からの情報を渡す方法についてのヘルプを提供する他の質問があります。 django-roaはこれを解決するためにResource Oriented Architectureパラダイムを使用します。

関連する問題