2010-09-05 198 views
5

是否有一个在线资源,显示如何编写一个简单的(但强大的)RESTFUL服务器/客户端(最好使用身份验证),用Python编写?Python中简单的RESTful客户端/服务器示例?

目标是能够编写我自己的轻量级RESTFUL服务,而不会受到整个Web框架的阻碍。话虽如此,如果有一种方法可以使用Django以轻量级的方式执行此操作(即编写RESFUL服务),我会同样感兴趣。实际上,为了达到这个目的,我甚至可能会选择一个基于Django的解决方案(假设它的轻量级 - 即不会使整个框架发挥作用),因为我将能够仅利用组件I需要,以实现更好的安全/访问服务。

+0

没有扭曲(http://twistedmatrix.com/trac/wiki/Documentation)给你?我碰巧喜欢它,因为它确实关注的不是GUI的东西,而是服务。 – extraneon 2010-09-05 09:59:26

回答

5

那么,首先你可以使用django-piston,就像@Tudorizer已经提到的那样。

但是,当我看到它(并且我可能错了!)时,REST更多的是一套设计指南,而不是具体的API。它基本上说的是,与服务的交互不应该基于'你可以做的事情'(典型的RPC风格的方法),而是'事情,你可以以可预见的方式采取行动,以某种方式组织'( '资源'实体和http动词)。

这就是说,你不需要额外的东西来编写使用Django的REST风格的服务。

考虑以下几点:

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

...等等。

重要的是你的服务如何暴露给用户,而不是它使用的库/工具箱/框架。

+1

并且对@shylent的答案进行细分,可以通过使用通用视图进一步减少编码量。见http://docs.djangoproject.com/en/dev/ref/generic-views/ – 2010-09-05 12:48:22

+0

morpheous提到:“最好带有身份验证”,活塞支持开箱即用的OAuth(以及Basic/Digest或自定义身份验证。 ) – Tudorizer 2010-09-06 03:36:17

+0

eggcelent .....! – morpheous 2010-09-06 20:40:54