2010-09-05 11 views
5

¿Hay algún recurso en línea que muestre cómo escribir un servidor/cliente RESTFUL simple (pero robusto) (preferiblemente con autenticación), escrito en Python?Ejemplo de cliente/servidor RESTFUL simple en Python?

El objetivo es poder escribir mis propios servicios RESTFUL livianos sin ser gravado por todo un framework web. Habiendo dicho eso, si hay una manera de hacer esto (es decir, escribir servicios RESFUL) de una manera ligera usando Django, estaría igualmente interesado.

De hecho, incluso puedo PREFERIR una solución basada en Django (siempre que sea lo suficientemente liviana, es decir, no ponga en juego toda la estructura), ya que podré aprovechar solo los componentes que necesidad, para implementar una mejor seguridad/acceso a los servicios.

+0

No Twisted (http://twistedmatrix.com/trac/wiki/Documentation) para usted? Me gusta, ya que realmente no se centra en la interfaz gráfica de usuario sino en los servicios. – extraneon

Respuesta

5

Bueno, antes que nada puedes usar django-piston, como @Tudorizer ya mencionado.

Pero, de nuevo, como lo veo (y podría estar equivocado), REST es más un conjunto de pautas de diseño, en lugar de una API concreta. Lo que esencialmente dice es que la interacción con su servicio no debe basarse en "cosas que puede hacer" (métodos típicos de estilo RPC), sino más bien "cosas, puede actuar de manera predecible, organizado de cierta manera" (la entidad 'resource' y los verbos http).

Dicho esto, no necesita nada adicional para escribir servicios de estilo REST usando django.

considerar lo siguiente:

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

... y así sucesivamente.

Lo que importa es cómo su servicio está expuesto a su usuario, no a la biblioteca/kit de herramientas/marco que utiliza.

+1

Y para riff on @ shylent, puede reducir la cantidad de codificación aún más usando vistas genéricas. Consulte http://docs.djangoproject.com/en/dev/ref/generic-views/ –

+0

mencionado morpheous: "preferiblemente con autenticación" y Pistons admite OAuth de fábrica (así como Basic/Digest o autenticación personalizada).) – Tudorizer

+0

eggcelent .....! – morpheous