2010-09-05 9 views
5

Gibt es eine Online-Ressource, die zeigt, wie man einen einfachen (aber robusten) RESTFUL-Server/-Client (vorzugsweise mit Authentifizierung) in Python schreibt?Einfaches RESTFUL-Client/Server-Beispiel in Python?

Ziel ist es, in der Lage zu sein, meine eigenen leichten RESTFUL-Dienste zu schreiben, ohne von einem ganzen Web-Framework belastet zu sein. Wenn ich das gesagt habe, wenn es einen Weg gibt, dies zu tun (d. H. RESUL-Dienste zu schreiben), mit Django, wäre ich gleichermaßen interessiert.

Eigentlich könnte ich sogar eine Django-basierte Lösung bevorzugen (vorausgesetzt, es ist leicht genug - dh bringt nicht das ganze Framework ins Spiel), da ich nur die Komponenten I nutzen kann Notwendigkeit, um eine bessere Sicherheit/Zugang zu den Diensten zu implementieren.

+0

Nein Twisted (http://twistedmatrix.com/trac/wiki/Documentation) für Sie? Ich mag es, weil es sich nicht auf GUI-Sachen konzentriert, sondern auf Services. – extraneon

Antwort

5

Nun, zunächst einmal können Sie django-piston verwenden, wie bereits erwähnt @Tudorizer.

Aber dann, wie ich es sehe (und ich könnte falsch liegen!), Ist REST eher eine Reihe von Design-Richtlinien, als eine konkrete API. Im Wesentlichen heißt das, dass die Interaktion mit Ihrem Service nicht auf "Dinge, die Sie tun können" (typische RPC-Methoden) basieren, sondern "Dinge, auf die Sie in einer bestimmten Art und Weise vorhersehbar reagieren können" (die 'Ressource' Entität und http Verben).

Das gesagt, Sie brauchen nichts extra zu schreiben REST-style-Dienste mit Django.

Beachten Sie Folgendes:

# urlconf 
from django.conf.urls.defaults import patterns, url 
urlpatterns = patterns('', 
    url(r'^tickets$', 'myapp.views.tickets', name='tickets'), 
    url(r'^ticket/(?P<id>\d+)$', 'myapp.views.tickets', name='ticket'), 
    url(r'^ticket$', 'myapp.views.tickets', name='ticket'), 
) 

# views 
def tickets(request): 
    tickets = Ticket.objects.all() 
    return render_to_response('tickets.html', {'tickets':tickets}) 

def ticket(request, id=None): 
    if id is not None: 
     ticket = get_object_or_404(Ticket, id=id) 
    if request.method == 'POST': 
     # create or update ticket here 
    else: 
     # just render the ticket (GET) 
    ... 

... und so weiter.

Worauf es ankommt, ist, wie Ihr Dienst dem Benutzer zur Verfügung gestellt wird, nicht die Bibliothek/das Toolkit/Framework, die/das er verwendet.

+1

Und um @ Shylents Antwort zu riffeln, können Sie den Umfang des Codierens noch weiter reduzieren, indem Sie generische Ansichten verwenden. Siehe http://docs.djangoproject.com/en/dev/ref/generic-views/ –

+0

morphe erwähnt: "vorzugsweise mit Authentifizierung" und Pistons unterstützt OAuth out of the box (sowie Basic/Digest oder benutzerdefinierte Auth.) – Tudorizer

+0

Eggcelent .....! – morpheous