Python中的简单RESTFUL客户端/服务器示例?

5 投票
2 回答
5255 浏览
提问于 2025-04-16 03:44

有没有什么在线资源可以教我怎么用Python写一个简单但又稳健的RESTFUL服务器/客户端(最好带有身份验证)呢?

我的目标是能够自己写轻量级的RESTFUL服务,而不想被整个网络框架束缚住。话说回来,如果有办法用Django轻松地写RESTFUL服务,我也很感兴趣。

其实,仔细想想,我甚至可能更喜欢基于Django的解决方案(前提是它足够轻量,不会把整个框架都带进来),因为这样我可以只使用我需要的部分,从而实现更好的安全性和对服务的访问控制。

2 个回答

2

这个看起来很不错。http://parand.com/say/index.php/2009/04/30/django-piston-rest-framework-for-django/ 我之前用过,感觉挺好用的。不过,最近好像没有人维护了。

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

……等等。

重要的是你的服务是如何向用户展示的,而不是它使用的库、工具或框架。

撰写回答