2009-06-30 8 views
2

J'ajoute le support de l'API MetaWeblog à un CMS Django, et je ne sais pas trop comment superposer l'application. J'utilise django_xmlrpc, ce qui me permet de mapper des fonctions paramétrées pour chaque requête. C'est juste un cas de quel niveau puis-je accrocher dans les appels à l'application django à partir des fonctions de service (AddPage, EditPage etc)Quel est le meilleur moyen d'ajouter une API à une application Django?

Pour django-page-cms, et je suppose que beaucoup d'applications django, la logique métier et la validation est contenu dans les formulaires. Dans ce cas, il y a PageForm (forms.ModelForm) et PageAdmin (ModelAdmin), qui contiennent beaucoup de logique et de validation.

Si je dois créer une API pour permettre la maintenance des pages et du contenu, est-ce que cela signifie que je devrais créer et remplir par programme une instance de PageAdmin? Puis attraper toutes les exceptions, et la conversion de leur équivalent api? Ou serait-ce une mauvaise idée - abuser de ce à quoi sont destinées les formes?

L'autre option consiste à refactoriser le code afin que les activités et la logique soient conservées en dehors des classes de formulaire. Ensuite, j'aurais la forme et l'API, les deux passer par la logique métier séparée.

Autres alternatives?

Quelle serait la meilleure solution?

Répondre

2

Les API de services Web sont juste plus d'URL.

Ces URL de l'API WS permettent d'afficher les fonctions.

Les fonctions de vue WS gèrent GET et POST (et éventuellement PUT et DELETE).

Les fonctions de vue WS utilisent les formulaires ainsi que les modèles pour faire bouger les choses.

C'est, en quelque sorte, comme une interface d'administration. Sauf, il n'y a pas de HTML.

Les fonctions d'affichage WS répondent avec des messages JSON ou des messages XML.

+0

Le service Web est déjà opérationnel. C'est un cas de quel niveau dans mon application puis-je accrocher. Donc, pour ma fonction de service AddPage() par exemple, vous génèreriez le formulaire d'administration par programme et le sauvegarderiez? –

+0

Je ne sais pas ce qu'est un "formulaire d'administration". Je sais ce qu'est une forme de modèle (http://docs.djangoproject.com/fr/dev/topics/forms/modelforms/#modelform) Si vous voulez dire ModelForm, alors oui. Vous utilisez le formulaire modèle pour valider les entrées, créer des instances de modèle et enregistrer les objets dans la base de données. –

+0

Les calques des cm vont PageAdmin (ModelAdmin)> PageForm (ModelForm) Page (Modèle). À l'heure actuelle, la seule façon de mettre à jour le contenu est via la zone d'administration. Il semble que la meilleure solution consistera pour mon service Web à utiliser PageForm, puis de refactoriser un peu afin que PageAdmin ne répète pas la même logique métier et la même validation. –

0

Il semble que python ne fournisse pas ceci dès la sortie de la boîte. Mais il y a quelque chose qui s'appelle abc module:

Je cite de http://www.doughellmann.com/PyMOTW/abc/ "En définissant une classe de base abstraite, vous pouvez définir une API commune pour un ensemble de sous-classes, cette fonctionnalité est particulièrement utile dans les situations où une tierce partie va fournir des implémentations ... "=> l'objectif d'une API, définir un contrat.

Questions connexes