2010-09-05 36 views
5

Có tài nguyên trực tuyến nào cho thấy cách viết một máy chủ/máy khách RESTFUL đơn giản (nhưng mạnh mẽ) (tốt nhất là với xác thực), được viết bằng Python không?Ví dụ về máy khách/máy chủ RESTFUL đơn giản bằng Python?

Mục tiêu là để có thể viết các dịch vụ RESTFUL nhẹ của riêng tôi mà không bị vướng bận bởi toàn bộ khung công tác web. Có nói rằng, nếu có một cách để làm điều này (tức là viết dịch vụ RESFUL) một cách nhẹ nhàng bằng cách sử dụng Django, tôi muốn được quan tâm không kém.

Thực ra, đến với nó, tôi thậm chí có thể ưu tiên giải pháp dựa trên Django (cung cấp đủ nhẹ - tức là không mang toàn bộ khuôn khổ vào chơi), vì tôi sẽ chỉ tận dụng được các thành phần tôi cần, để thực hiện bảo mật/truy cập tốt hơn cho các dịch vụ.

+0

Không xoắn (http://twistedmatrix.com/trac/wiki/Documentation) cho bạn? Tôi tình cờ thích nó vì nó thực sự tập trung không phải trên các công cụ GUI nhưng trên các dịch vụ. – extraneon

Trả lời

5

Trước hết, bạn có thể sử dụng django-piston, như @Tudorizer đã đề cập.

Nhưng sau đó một lần nữa, như tôi thấy nó (và tôi có thể sai!), REST là một bộ hướng dẫn thiết kế hơn là một API cụ thể. Điều cơ bản nó nói là sự tương tác với dịch vụ của bạn không nên dựa trên 'những thứ bạn có thể làm' (phương pháp kiểu RPC điển hình), mà là 'mọi thứ, bạn có thể hành động theo những cách có thể đoán trước, được tổ chức theo một cách nào đó' (thực thể 'tài nguyên' và động từ http).

Điều đó đang được nói, bạn không cần thêm gì để viết các dịch vụ kiểu REST bằng django.

xem xét như sau:

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

... và vân vân.

Điều quan trọng là cách dịch vụ của bạn được hiển thị với người dùng, không phải thư viện/bộ công cụ/khung mà nó sử dụng.

+1

Và để trả lời câu trả lời của @ shylent, bạn có thể giảm số lượng mã hóa hơn nữa bằng cách sử dụng chế độ xem chung. Xem http://docs.djangoproject.com/en/dev/ref/generic-views/ –

+0

được đề cập một cách chi tiết: "tốt nhất là với xác thực" và Pistons đã hỗ trợ OAuth ngoài hộp (cũng như Basic/Digest hoặc auth custom).) – Tudorizer

+0

eggcelent .....! – morpheous