2012-02-13 8 views
8

Ho un front-end web Django che consuma dati da un backend API REST. Anche gli utenti sono creati e creati sul back-end.Django: progetto che consuma dati dall'API REST, Come utilizzare app esterne in questo sistema?

mio problema:

  • Come utilizzare applicazioni 3rd party all'interno di questo sistema, che pesantemente dipendono Django modelli/ORM?
  • C'è qualcosa che può fornire un ponte tra le risorse REST API e l'ORM?

Come può essere risolto questo problema?

Aggiornamento

DRY principale sembra essere mancata in questa situazione.

+2

Per quello che vale, non sono a conoscenza di alcun buon (o addirittura non così buono) modo di farlo. –

+0

Vediamo, se possiamo trovare qualcuno che può consigliare una soluzione per questa situazione. –

+0

Sì, sarei interessato a vedere una soluzione, se ne esiste una. –

risposta

-3

io non sono sicuro di aver capito completamente la tua domanda o requisiti. Per come la sto leggendo, hai un back-end primario che è fondamentalmente una black-box e nel tuo progetto vuoi usare alcune app di terze parti che usano l'ORM Django.

Non sono chiaro perché ci sia la necessità di poter disporre di una sincronizzazione a due vie tra i due archivi di dati. Gli utenti del progetto verrebbero restituiti dal back-end primario e dall'ORM del progetto.

Dal momento che si sono preoccupati per il salvataggio dei dati "ORM" nel back-end primario, forse si prenderebbe in considerazione la creazione di un middleware transazione che avrebbe licenziare qualsiasi dei dati in tempo ORM viene aggiornato, in grado di serializzare la struttura che viene salvato e trasmetterlo alla tua API REST. Questa API REST, presumo, è in grado di accettare strutture dati arbitrarie?

Probabilmente vorrai almeno usare del modulo di middleware e forse un modulo di utilità/classe per aiutare a formare il "ponte".

+0

Hm .. il middleware entra in azione prima e dopo le visualizzazioni. Ma le chiamate DB sono generalmente fatte in visualizzazioni, quindi come può un middleware fare la magia? –

+0

@YugalJindle, utilizzare TransactionMiddleware. Vedi anche https://docs.djangoproject.com/en/dev/topics/db/transactions/. – imm

+0

Interessante .. Penso che sia stato utile. Puoi collegarti a un progetto usando una tecnica di bridging simile? –

-2

Sono di fronte a un ostacolo simile con un nuovo progetto di e-commerce. Il progetto è un front end per un vero e proprio software di gestione del negozio (CMS + ERP + CRM). Ha bisogno di utilizzare il database del prodotto principale, ma ha le sue voci per recensioni di prodotti, valutazioni e così via.

L'idea iniziale era di creare una copia memorizzata nella cache del database principale. Il sito Web beneficerà di tempi di caricamento rapidi per gli elementi memorizzati nella cache, ma l'implementazione non è banale.

Dopo alcune considerazioni, l'approccio selezionato stava aggiornando il DB del sito Web dal programma di gestione. In questo modo la copia del sito web sarà sempre corretta e la maggior parte dell'implementazione non dovrà preoccuparsi dei servizi REST (sarà comunque utilizzata per la registrazione dell'utente, il monitoraggio della spedizione, ecc.)

Nel tuo caso, dove tu impossibile che il servizio aggiorni il proprio database da remoto, è necessario creare un meccanismo che consenta di fare riferimento a ricorsi REST come i modelli normali e che li memorizzino in cache in background.

Nota importante: la ricerca di un modo per assicurarsi che la cache è sempre corretto (non sporco) ...

+0

Esiste un progetto opensource che utilizza tale soluzione? –

0

Probabilmente le cose sono cambiate da quando questa domanda è stata originariamente pubblicata. Ora ci sono un paio di interessanti domande correlate su StackOverflow su questo argomento.

Per programmare una soluzione come spiegato in in this answer, è possibile creare un livello di servizio esterno (ovvero services.py) e scrivere lì la logica per accedere alle risorse esterne. Le tue visualizzazioni consumeranno questo livello e faranno le azioni appropriate. Ci sono altre domande che forniscono aiuto su come passare le informazioni dalla richiesta originale ricevuto dalla Django-view al servizio esterno come this o this

C'è anche un app Django che prende questa situazione in considerazione come spiegato in this answer. django-roa utilizza il paradigma Resource Oriented Architecture per risolvere questo problema.

Problemi correlati