2010-09-05 8 views
5

Esiste una risorsa online che mostra come scrivere un server/client RESTFUL semplice (ma robusto) (preferibilmente con autenticazione), scritto in Python?Esempio di client/server RESTFUL semplice in Python?

L'obiettivo è essere in grado di scrivere i miei servizi RESTFUL leggeri senza essere ingombrati da un intero framework web. Detto questo, se c'è un modo per farlo (cioè scrivere servizi RESFUL) in modo leggero usando Django, sarei ugualmente interessato.

A dire il vero, posso anche PREFERIRE una soluzione basata su Django (a condizione che sia abbastanza leggera - cioè non porti in gioco l'intera struttura), poiché potrò approfittare solo dei componenti I necessità, al fine di attuare una migliore sicurezza/accesso ai servizi.

+0

No Twisted (http://twistedmatrix.com/trac/wiki/Documentation) per te? Mi piace piacermi visto che si focalizza non sulle cose della GUI ma sui servizi. – extraneon

risposta

5

Bene, prima di tutto è possibile utilizzare django-piston, come @Tudorizer già menzionato.

Ma poi di nuovo, come vedo (e potrei sbagliarmi!), REST è più un insieme di linee guida di progettazione, piuttosto che un'API concreta. Ciò che sostanzialmente dice è che l'interazione con il tuo servizio non dovrebbe essere basata su "cose ​​che puoi fare" (tipici metodi in stile RPC), ma piuttosto "le cose, puoi agire in modi prevedibili, organizzati in un certo modo" (l'entità 'risorsa' e i verbi http).

Detto questo, non è necessario alcun extra per scrivere servizi in stile REST utilizzando django.

Si consideri il seguente:

# 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) 
    ... 

... e così via.

Ciò che conta è il modo in cui il servizio è esposto all'utente, non la libreria/il toolkit/framework che utilizza.

+1

E per riff sulla risposta di @ shylent, è possibile ridurre ulteriormente la quantità di codice utilizzando viste generiche. Vedi http://docs.djangoproject.com/en/dev/ref/generic-views/ –

+0

morpheous menzionato: "preferibilmente con autenticazione" e Pistons ha supportato OAuth out of the box (così come Basic/Digest o custom auth.) – Tudorizer

+0

eggcelent .....! – morpheous