58 votes

Django et Restful Api

J'ai été aux prises avec le choix d'une méthodologie pour la création d'une API RESTful avec Django. Aucune des méthodes que j'ai essayé semblent être les "silver" bullet. WAPI de http://fi.am est probablement le plus proche de ce que je voudrais accomplir, mais je ne suis pas sûr si c'est acceptable dans un vrai API RESTful pour avoir des paramètres qui sont des identificateurs de ressource être dans la chaîne de requête à la place d'un "propre" format d'URL. Toutes les suggestions de modification de la WAPIs RestBinding.MODÈLE de "nettoyer" l'Url? Une autre option, que j'ai exploré est celui de Django-Reste de l'Interface. Toutefois, ce cadre semble violer l'une des pièces les plus importantes dont j'ai besoin, et c'est d'inclure la totalité des URL de ressource pour les références à d'autres ressources (voir http://jacobian.org/writing/rest-worst-practices/ la Mauvaise Utilisation de Liens). La dernière option est d'utiliser django-multiresponse et fondamentalement faire le chemin le plus long.

Merci de me proposer vos meilleurs conseils, en particulier les personnes qui ont traité de cette décision.

41voto

Sun Liwen Points 884

Pour Django, en plus de tastypie et le piston, django-repos-cadre est prometteur vaut la peine de mentionner. J'ai déjà migré un de mes projet sur celui-ci en douceur.

Django RESTE du cadre est un léger REPOS cadre de Django, qui vise à le rendre facile de construire la bien relié, de s'auto-décrire Reposante Les Api Web.

Exemple rapide:

from django.conf.urls.defaults import patterns, url
from djangorestframework.resources import ModelResource
from djangorestframework.views import ListOrCreateModelView, InstanceModelView
from myapp.models import MyModel

class MyResource(ModelResource):
    model = MyModel

urlpatterns = patterns('',
    url(r'^$', ListOrCreateModelView.as_view(resource=MyResource)),
    url(r'^(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MyResource)),
)

Prenons l'exemple du site officiel, tous les codes ci-dessus fournissent des api, l'auto expliqué document(comme le savon à base d'un webservice) et même bac à sable pour tester un peu. Très pratique.

Liens: http://django-rest-framework.org/

18voto

gsiegman Points 674

Je crois que la publication récente de django-piston est maintenant la meilleure solution pour la création d'un bon RESTE de l'interface dans Django. django-piston

Note: django-piston ne semble plus être maintenu (voir les commentaires ci-dessous)

9voto

guerrerocarlos Points 549

django-tastypie est une bonne façon de le faire, leur slogan: "la Création de délicieux Api pour les applications Django depuis 2010" est assez réconfortant ;)

5voto

chrismi Points 61

Vous pourriez jeter un regard à django-dynamicresponse, ce qui est un léger cadre pour l'ajout de l'API REST JSON de votre Django applications.

Elle nécessite peu de modifications pour ajouter la prise en charge des API existantes Django apps, et le rend simple à construire-dans l'API depuis le début de nouveaux projets.

En fait, il inclut middleware support de l'analyse JSON en demande.La POSTE, en plus de la sérialisation de l'retourné contexte JSON ou le rendu d'un modèle/redirection conditionnelle en fonction du type de demande.

Cette approche diffère de celle des autres cadres (comme django-piston) que vous n'avez pas besoin de créer des gestionnaires pour les requêtes à l'API. Vous pouvez également réutiliser votre vue de la logique, et gardez à l'aide du formulaire de validation etc. comme d'habitude les points de vue.

4voto

Jesper Mortensen Points 2028

Je ne sais pas si ce projet peut être utile pour vous, mais l'envoi d'un lien ne peut guère faire de mal. Jetez un oeil à django-apibuilder , disponible à partir de http://opensource.washingtontimes.com/projects/django-apibuilder/ . Peut-être il peut être utile?

/Jesper

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X