2010-11-20 8 views
9

Was bevorzugen Sie, wenn Sie Ihr Django-Projekt in Django "restifizieren" möchten?RESTful-APIs für Django-Projekte/-Apps

Ich kam zu dem Schluss, dass es wirklich drei Optionen sind, das zu tun: http://bitbucket.org/jespern/django-piston/wiki/Home

  • django-rest-Schnittstelle http://code.google.com/p/django-rest-interface/
  • django-geruhsamen-Ressourcen

    Richtiger Weg, dies für mich zu tun wäre, alle von ihnen zu versuchen und wählen Sie das, das für mich am besten ist, so in der Zwischenzeit möchte ich Ihre hören ...

    Danke.

  • Antwort

    7

    Ich bin am vertrautesten mit Django-Kolben, also würde ich Sie natürlich in diese Richtung steuern.

    Ein kurzer Blick auf die anderen beiden zeigt jedoch, dass django-rest-interface nichts anderes tut, als Modelle als Ressourcen zu exponieren, und dass django-restful-resources der einmalige Versuch eines Mannes ist.

    Kolben, wenn ich mich richtig erinnere, wuchs aus bitbucket.org eigene Website-Entwicklung, und erlaubt eine Menge Flexibilität - Sie können fast jedes Objekt aus den Zugriffsmethoden Ihrer Ressource, nicht nur Modell-Instanzen, und es wird ordnungsgemäß codiert. Es hat auch eingebaute Unterstützung für einige nette Funktionen, wie Formularvalidierung (wenn Sie es irgendwie richtig arbeiten können) und Anfrage Drosselung, unter anderem.

    +0

    Danke für Ihre Antwort. – Ali

    3

    Als der "Typ", der django-restful-resources schrieb, würde ich gerne erklären, warum es existiert. Es ist KEIN Versuch, Modelle als Ressourcen verfügbar zu machen, sondern es ist eine Möglichkeit, eine einzelne URL einer Anzahl von verschiedenen Handler-Methoden zuzuordnen, eine pro HTTP-Verb. Das ist alles. Es kann zum Freigeben von Modellobjekten verwendet werden, aber es kann auch dazu verwendet werden, Dienste als Ressourcen oder andere Elemente anzuzeigen, mit denen Sie über eine einzige URL und HTTP-Verben interagieren möchten. Wenn Sie nach einer umfassenderen Lösung suchen, sollten Sie unbedingt Piston verwenden.

    +0

    Hallo Tom, danke, dass du dir Zeit genommen hast und diese Frage beantwortet hast. Könntest du mich bitte über HTTP-Verb-Ding aufklären? Vielen Dank. – Ali

    +2

    Hallo exaltierte, HTTP-Verben (oder HTTP-Methoden) sind GET, POST, PUT, KOPF, LÖSCHEN, OPTIONEN und TRACE. Sie können sehr gute Beschreibungen finden, wie Sie diese verwenden können, um RESTful Web Services unter den folgenden Links zu schreiben: - http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html - http: // www. amazon.com/REST-Practice-Hypermedia-Systems-Architecture/dp/0596805829 - http://watchitlater.com/blog/2009/11/http-method-primer-for-restful-web-services/ (schamloser Stecker) – Tom

    2

    Wie von eternicode erwähnt, ist django-piston ausgezeichnet. Es ist reif, gut ausgestattet und hat eine gute Community dahinter. Es scheint momentan zu wenig Entwicklung zu geben, obwohl es von einer gemeinschaftsgetriebenen Abspaltung spricht, so dass sich das ändern kann.

    django-tastypie ist auch einen Blick wert, und scheint im Moment nicht viel Schwung dahinter zu haben.

    habe ich auch nur eine weitere Option freigegeben, die eine Überlegung wert: django-rest-framework. Es gibt ein paar wirklich nette Features wie die API auto-documentation dahinter.

    Es verwendet Django 1.3's klassenbasierte Ansichten, wie von saverio erwähnt, was bedeutet, dass Sie einfach einige der MixIn-Klassen, die es bietet, einfügen können, ohne das Framework direkt verwenden zu müssen. (Zum Beispiel)

    5

    Mit den neuen klassenbasierten generischen Ansichten in django 1.3 wird es sehr einfach sein, Ihre eigene Ruheschnittstelle mit benutzerdefinierten Serialisierern und Deserialisierern zu implementieren, die die fast vollständige Kolbenimplementierung mit nur Lagercode repliziert. Ich habe ein View (1.3) -basiertes Restmodul in 500 Codezeilen mit generischer RESTful-Ressourcenklasse und Subressourcen, natürlicher Schlüsselunterstützung für Assoziationen, JSON- und XML-Serialisierung und mehr erstellt.Das Modul ist wirklich auf die Anforderungen meiner App zugeschnitten.

    Ich habe es getan, um ein paar Einschränkungen in Kolben-Code zu überwinden, wie eine Abfrage gesetzt geändert (zB mit .Values ​​(...)) vor dem Handler aufrufen .get () oder die Methode eines Modells in der Serialisierung nicht verwenden zu können.

    Wenn Sie es so machen, wie Sie es brauchen, werden Sie in ein paar Tagen eine Reihe von Klassen und Mixins haben, die Sie vollständig verstehen und beherrschen.

    +0

    Sie können meine eigenen erholsamen Ansichten bei http://github.com/rewritten versuchen. Es ist nicht gründlich getestet und es könnte gut sein, ein paar mehr Augen zu bekommen. – rewritten

    Verwandte Themen