Gibt es irgendwo eine Liste mit Empfehlungen verschiedener Python-basierter REST-Frameworks, die auf der Serverseite zum Schreiben eigener RESTful-APIs verwendet werden können? Am besten mit Vor- und Nachteilen.
Bitte zögern Sie nicht, hier Empfehlungen hinzuzufügen. :) :)
python
web-services
rest
frameworks
Darius
quelle
quelle
Antworten:
Beim Entwerfen einer RESTful-API ist die Verschmelzung von GET und POST so zu beachten, als ob sie dasselbe wären. Es ist leicht, diesen Fehler mit den funktionsbasierten Ansichten von Django und dem Standard-Dispatcher von CherryPy zu machen , obwohl beide Frameworks jetzt einen Weg bieten, um dieses Problem zu umgehen ( klassenbasierte Ansichten bzw. MethodDispatcher ).
HTTP-Verben sind in REST sehr wichtig , und wenn Sie nicht sehr vorsichtig sind, fallen Sie in ein REST-Anti-Pattern .
Einige Frameworks, die es richtig machen, sind web.py , Flask und Bottle . In Kombination mit der Mimerender- Bibliothek (vollständige Offenlegung: Ich habe sie geschrieben) können Sie nette RESTful-Webservices schreiben:
Die Logik des Dienstes wird nur einmal implementiert, und die richtige Auswahl der Darstellung (Kopfzeile akzeptieren) + Versand an die richtige Renderfunktion (oder Vorlage) erfolgt auf ordentliche, transparente Weise.
Update (April 2012) : Informationen zu den klassenbasierten Ansichten von Django, CherryPys MethodDispatcher und Flask and Bottle-Frameworks hinzugefügt. Beides existierte nicht, als die Frage gestellt wurde.
quelle
Überrascht erwähnte niemand die Flasche .
quelle
Wir verwenden Django für RESTful-Webdienste.
Beachten Sie, dass Django nicht sofort über eine ausreichende Authentifizierung für unsere Anforderungen verfügte. Wir haben die Django-REST-Schnittstelle verwendet , was sehr hilfreich war. [Wir haben seitdem unsere eigenen gerollt, weil wir so viele Erweiterungen vorgenommen hatten, dass es zu einem Alptraum für die Wartung geworden war.]
Wir haben zwei Arten von URLs: "HTML" -URLs, die die menschlich orientierten HTML-Seiten implementieren, und "json" -URLs, die die webdienstorientierte Verarbeitung implementieren. Unsere Ansichtsfunktionen sehen oft so aus.
Der Punkt ist, dass die nützliche Funktionalität aus den beiden Präsentationen herausgerechnet wird. Die JSON-Präsentation ist normalerweise nur ein Objekt, das angefordert wurde. Die HTML-Präsentation enthält häufig alle Arten von Navigationshilfen und andere kontextbezogene Hinweise, die Menschen dabei helfen, produktiv zu sein.
Die
jsonView
Funktionen sind alle sehr ähnlich, was etwas nervig sein kann. Aber es ist Python, also machen Sie sie zu einem Teil einer aufrufbaren Klasse oder schreiben Sie Dekorateure, wenn es hilft.quelle
y = someUsefulThing(...)
es sich um eine "schreckliche Wiederholung" handelt, sind alle Verweise auf alle Funktionen und Methoden "schrecklich". Ich verstehe nicht, wie ich vermeiden kann, eine Funktion mehr als einmal zu referenzieren .someUsefulThing(request, object_id)
gilt auch für einen Datenabrufausdruck. Jetzt haben Sie zwei Kopien desselben Ausdrucks an verschiedenen Stellen in Ihrem Programm. In der akzeptierten Antwort wird der Datenausdruck einmal geschrieben. Ersetzen Sie IhrensomeUsefulThing
Anruf durch eine lange Zeichenfolgepaginate(request, Post.objects.filter(deleted=False, owner=request.user).order_by('comment_count'))
und sehen Sie sich den Code an. Ich hoffe, es wird meinen Standpunkt veranschaulichen.Siehe Python Web Frameworks- Wiki.
Sie benötigen wahrscheinlich nicht die vollständigen Stack- Frameworks, aber die verbleibende Liste ist noch ziemlich lang.
quelle
Ich mag CherryPy wirklich . Hier ist ein Beispiel für einen erholsamen Webdienst:
Dies unterstreicht, was ich an CherryPy wirklich mag; Dies ist ein vollständig funktionierendes Beispiel, das selbst für jemanden, der das Framework nicht kennt, sehr verständlich ist. Wenn Sie diesen Code ausführen, können Sie die Ergebnisse sofort in Ihrem Webbrowser anzeigen. Wenn Sie beispielsweise http: // localhost: 8080 / celc_to_fahr? Grad = 50 besuchen, wird dies
122.0
in Ihrem Webbrowser angezeigt.quelle
Schau es dir an
quelle
Ich sehe keinen Grund, Django nur zu verwenden, um eine REST-API freizulegen. Es gibt leichtere und flexiblere Lösungen. Django bringt viele andere Dinge auf den Tisch, die nicht immer benötigt werden. Sicherlich nicht erforderlich, wenn Sie nur Code als REST-Service verfügbar machen möchten.
Meine persönliche Erfahrung, fwiw, ist, dass Sie, sobald Sie ein einheitliches Framework haben, das ORM, die Plugins usw. verwenden, nur weil es einfach ist und Sie in kürzester Zeit eine Abhängigkeit haben das ist sehr schwer loszuwerden.
Die Auswahl eines Webframeworks ist eine schwierige Entscheidung, und ich würde es vermeiden, eine Full-Stack-Lösung auszuwählen, nur um eine REST-API verfügbar zu machen.
Wenn Sie Django wirklich brauchen / wollen, dann ist Piston ein schönes REST-Framework für Django-Apps.
Davon abgesehen sieht CherryPy auch sehr gut aus, scheint aber mehr RPC als REST zu sein.
Wenn Sie sich die Beispiele ansehen (ich habe sie nie verwendet), ist web.py wahrscheinlich die beste und sauberste, wenn Sie nur REST benötigen.
quelle
Hier ist eine Diskussion in CherryPy-Dokumenten zu REST: http://docs.cherrypy.org/dev/progguide/REST.html
Insbesondere wird ein integrierter CherryPy-Dispatcher namens MethodDispatcher erwähnt, der Methoden aufruft, die auf ihren HTTP-Verb-IDs (GET, POST usw.) basieren.
quelle
Im Jahr 2010 haben sich die Communitys Pylons und repoze.bfg "zusammengeschlossen", um Pyramid zu erstellen , ein Webframework, das am stärksten auf repoze.bfg basiert. Es behält die Philosophie seiner übergeordneten Frameworks bei und kann für RESTful-Services verwendet werden . Es ist einen Blick wert.
quelle
Piston ist ein sehr flexibles Framework für die Verkabelung von RESTful-APIs für Django-Anwendungen.
quelle
Anscheinend können alle Arten von Python-Webframeworks jetzt RESTful-Schnittstellen implementieren.
Für Django ist neben Tastypie und Kolben das Django-Rest-Framework ein vielversprechendes, erwähnenswertes. Ich habe bereits eines meiner Projekte reibungslos darauf migriert.
Kurzes Beispiel:
Nehmen Sie das Beispiel von der offiziellen Website, alle oben genannten Codes bieten API, selbsterklärendes Dokument (wie Seifen-basierter Webservice) und sogar Sandbox, um ein wenig zu testen. Sehr bequem.
Links: http://django-rest-framework.org/
quelle
Ich bin kein Experte für die Python-Welt, aber ich habe Django verwendet , ein ausgezeichnetes Web-Framework, mit dem ein erholsames Framework erstellt werden kann.
quelle
web2py bietet Unterstützung für das einfache Erstellen von RESTful-APIs, die hier und hier beschrieben werden (Video). Sehen
parse_as_rest
Sie sich insbesondere an , mit dem Sie URL-Muster definieren können, mit denen Anforderungsargumente Datenbankabfragen zugeordnet werden. undsmart_query
, wodurch Sie beliebige Abfragen in natürlicher Sprache in der URL übergeben können.quelle
Wenn Sie Django verwenden, können Sie Django -Tastypie in Betracht ziehen als Alternative zum Django-Kolben in Betracht ziehen . Es ist einfacher, auf Nicht-ORM-Datenquellen als auf Kolben abzustimmen, und es verfügt über eine hervorragende Dokumentation .
quelle
Ich empfehle TurboGears oder Bottle:
TurboGears:
Flasche:
quelle
Wir arbeiten an einem Framework für strenge REST-Services. Weitere Informationen finden Sie unter http://prestans.googlecode.com
Es ist im frühen Alpha im Moment, wir testen gegen mod_wsgi und Googles AppEngine.
Auf der Suche nach Testern und Feedback. Vielen Dank.
quelle