8
votes

DJANGO: Projet de consommation de données de l'API de repos, comment utiliser des applications externes dans ce système?

J'ai un front Web Django Web qui consomme des données d'un backend API de repos. Même les utilisateurs sont fabriqués et créés sur le backend.

mon problème:

  • Comment utiliser des applications 3ème partie dans ce système, qui dépendent fortement de Django modèles / orm ?
  • Y a-t-il quelque chose qui peut fournir un pont entre les ressources API et l'ormes?

    Comment ce problème peut-il être traité?

    mise à jour

    sec principal semble échouer dans cette situation.


3 commentaires

Pour ce que cela vaut, je ne suis pas au courant d'une bonne manière (ou même pas si bonne) de faire cela.


Voyons, si nous pouvons trouver quelqu'un qui peut conseiller une solution pour cette situation.


Oui, je serai intéressé de voir une solution, si l'on existe.


3 Réponses :


-2
votes

Je suis confronté à un obstacle similaire avec un nouveau projet de commerce électronique. Le projet est une extrémité frontale à un logiciel de gestion de magasin à part entière (CMS + ERP + CRM). Il doit utiliser la base de données des produits maîtres, mais avoir ses propres entrées pour les critiques de produits, les évaluations et ainsi de suite.

La pensée initiale était de créer une copie en cache de la base de données principale. Le site Web bénéficiera de temps de chargement rapide pour les éléments mis en cache, mais la mise en œuvre n'est pas triviale.

Après quelques considérations, l'approche sélectionnée mettait la mise à jour de la DB du site Web du programme de gestion. De cette façon, la copie du site Web sera toujours correcte et la majeure partie de la mise en œuvre n'a pas à s'inquiéter des services de repos (il sera toujours utilisé pour l'enregistrement de l'utilisateur, le suivi des envois, etc.)

Dans votre cas, où vous ne pouvez pas avoir le service à la mise à jour de votre propre base de données à distance, vous devez proposer un mécanisme qui vous permet de faire référence à des recours de repos tels que des modèles réguliers et qui les met en caches en arrière-plan. < / p>

Note importante: Recherche de manière à vous assurer que le cache est toujours correct (non sale) ...


1 commentaires

Existe-t-il un projet OpenSource en utilisant une telle solution?



-3
votes

Je ne suis pas sûr de comprendre complètement votre question ou vos exigences. La façon dont je le lis, vous avez un back-end principal qui est essentiellement une boîte noire et vous souhaitez utiliser certaines applications tierces dans votre projet qui utilisent le Django Orm.

Je ne suis pas clair sur la raison pour laquelle il serait nécessaire de pouvoir avoir une synchronisation à double sens entre les deux magasins de données. Les utilisateurs de votre projet seraient renvoyés des données de votre back-end principal et de l'orèse du projet.

Depuis que vous êtes préoccupé par la sauvegarde des données "ORM" dans votre back-end principal, vous envisageriez peut-être que la création d'un middleware de transaction qui déclencherait des données ORM de Time est mise à jour, ce qui pourrait sérialiser la structure étant sauvegardée et la transmettre à votre API de repos. Cet API de repos, je suppose, est capable d'accepter des structures de données arbitraires?

Vous voulez probablement au moins utiliser forme forme Middleware , et peut-être un module d'utilité / classe pour aider à former le "pont".


10 commentaires

HM .. Middleware entre en action avant et après les vues. Mais les appels DB sont généralement fabriqués dans des vues, alors comment un middleware peut-il faire la magie?


@Yugaljindle, utilisez TransactionMidDleware. Voir docs.djangoproject.com/fr/dev/topics/db/transactions < / a> aussi.


Intéressant .. Je pense que cela a été utile. Pouvez-vous créer un lien vers un projet en utilisant une technique de pontage similaire?


Mais .. Pouvez-vous créer un lien vers un exemple de projet en utilisant cette technique, car je suppose que cela doit être un problème standard.


Pouvez-vous expliquer un peu plus ..?


Je comprends ce que vous avez suggéré que comment puis-je intercepter les appels de base de données, mais mon API de repos n'est pas une table de base de données, donc je n'ai pas d'idée de mapper un dB requête à mon API de repos . Exemple: entrée.Object.filter (PUB_Date__Year = 2005) .Order_by ('- PUB_DAT E', "TIREL") à mon API de repos qui comprend uniquement les URL. C'est pourquoi j'ai demandé si vous connaissez un projet OpenSource en utilisant des trucs similaires. Si l'interception était le seul cas, ma question aurait été "Comment intercepter les appels de DB à Django Orm?"


Pouvez-vous s'il vous plaît clarifier ce que votre API de repos est capable d'accepter? Peut-il accepter des données arbitraires?


Eh bien, API de repos est une interface URL à un objet qui fournit CRUD aux propriétés de l'objet.


Oui ... mais je suppose que son magasin de données sous-jacent n'empêche pas précisément tout ce que vous avez dans votre projet Django, c'est pourquoi vous avez fait le message en premier lieu. Donc, si vous pouvez affecter une zone de votre magasin de données sous-jacent pour des données non structurées, ce serait une option.


Il ressemble à une science de la fusée pour moi: Mimicking Table jointe avec un crud simple sans que le projet open source soit suffisamment mature pour gérer cette science sur le repos. Donc?



0
votes

Les choses probablement ont changé depuis que cette question a été publiée à l'origine. Maintenant, il y a quelques questions connexes intéressantes sur Stackoverflow à propos de ce sujet.

Pour vous coder une solution comme expliquée dans cette réponse , vous pouvez créer une couche de service externe (AKA services.py ) et écrivez-y la logique pour accéder aux ressources externes. Vos vues consommeront cette couche et apporteront les actions appropriées. Il existe d'autres questions qui fournissent de l'aide sur la manière de transmettre des informations à partir de la demande initiale reçue par la vue Django-View au service externe, comme Ce ou Ce

Il existe également une application Django qui prend cette situation en compte comme expliqué dans cette réponse . DJANGO-ROA utilise le Architecture orientée des ressources paradigme pour résoudre ce problème.


0 commentaires