2010-09-05 53 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

相關問題