2012-01-26 52 views
8

Đây là một câu hỏi kỳ lạ, tôi biết, nhưng chịu đựng với tôi. Chúng tôi đã phát triển một nền tảng RESTful bằng cách sử dụng Python cho một trong các ứng dụng iPhone của chúng tôi. Phiên bản webapp đã được xây dựng bằng cách sử dụng Django, sử dụng API này. Chúng tôi đã nghĩ rằng nó sẽ là một ý tưởng tuyệt vời để sử dụng khả năng bảng điều khiển tích hợp của Django để giúp quản lý dữ liệu.Quản trị Django sử dụng API RESTful v.s. Cơ sở dữ liệu

Chính điều này không phải là vấn đề. Vấn đề là tất cả mọi người đã quyết định nó sẽ là tốt nhất của trung tâm quản trị về cơ bản là một khách hàng ngồi trên nền tảng RESTful. Vì vậy, câu hỏi của tôi là, có cách nào để thao tác lớp mô hình Django để truy cập trực tiếp vào API của chúng tôi, thay vì được truyền trực tiếp với cơ sở dữ liệu không? Không. Lớp mô hình sẽ hoạt động như khách hàng chuyển yêu cầu và phản hồi đến và từ trung tâm quản trị.

Tôi chắc chắn điều này là có thể, nhưng tôi không chắc chắn về nơi tôi sẽ bắt đầu. Bất kỳ đầu vào?

+1

không có gì là không thể, nhưng có vẻ như rất nhiều công việc. Nếu bạn có thể kết nối django với DB, bạn sẽ tiết kiệm được rất nhiều thời gian. Tôi có thể hiểu được mong muốn sử dụng nó như một ứng dụng thử nghiệm cho API, nhưng có lẽ có một ứng dụng khác mà bạn có thể thực hiện, hoặc thậm chí viết các trường hợp thử nghiệm. – monkut

+1

Dường như có nhiều công việc hơn là giá trị. Có thể bạn sẽ phải xem xét một trong hai Người quản lý mô hình hoặc một chương trình phụ trợ db tùy chỉnh. – jdi

+0

Wilhelm, tôi đang đối mặt với tình huống tương tự. Bạn đã bao giờ giải quyết nó như bạn dự định hoặc bạn đã từ bỏ và truy cập cơ sở dữ liệu trực tiếp? – JoaoPSF

Trả lời

0

Tôi nhớ mình đã từng nghĩ đến việc làm như vậy. Vào thời điểm đó, tôi đã tạo Trình quản lý tùy chỉnh bằng cách sử dụng QuerySet tùy chỉnh. Và tôi đã bỏ qua một số phương pháp như _filter_or_exclude(), count(), exists(), select_related(), ... và thêm một số thuộc tính. Mất ít hơn một tuần để trở thành một mớ hỗn độn mà có lẽ không có cơ hội để làm việc một ngày nào đó. Vì vậy, tôi ngay lập tức dừng mọi thứ và tìm ra một giải pháp phù hợp hơn.

Nếu tôi phải làm điều đó một lần nữa, tôi sẽ mất một thời gian dài để xem xét lựa chọn thay thế. Và nếu nó thực sự có vẻ như là điều tốt nhất để làm, tôi có thể tạo một cơ sở dữ liệu tùy chỉnh. Phần cuối này sẽ thay vì chuyển đổi các truy vấn ORM của Django thành các truy vấn SQL, chuyển chúng thành các yêu cầu HTTP.

Để làm như vậy, tôi nghĩ điểm khởi đầu tốt nhất là làm quen với django source code concerning database backends.

Tôi cũng nghĩ rằng có một số điều quan trọng cần cân nhắc trước khi bắt đầu phát triển như:

  • là API có thể xử lý bất kỳ yêu cầu Django ORM? Đặt một cách khác: Liệu có bất kỳ truy vấn ORM Django nào có thể dịch sang yêu cầu API không?
  • Nếu không, các truy vấn "không thể truyền tải" có thể được bỏ qua một cách an toàn không? Ví dụ: một điều khoản ORDER BYcó thể sẽ an toàn để bỏ qua. Trong khi điều khoản GROUP BY rất khó được loại bỏ một cách an toàn.
  • Nếu một số truy vấn không thể dịch và bỏ qua, chúng có thể là hợp lý được mô phỏng. Ví dụ: nếu API của bạn không hỗ trợ hoạt động COUNT(), bạn có thể mô phỏng nó bằng cách lấy toàn bộ dữ liệu và đếm nó trong python với len(), nhưng điều này có hợp lý không?
  • Nếu họ vẫn còn một số truy vấn mà bạn sẽ không thể xử lý (có nhiều khả năng): Tất cả truy vấn "phổ biến" (trong trường hợp này, tất cả truy vấn có khả năng được sử dụng bởi Quản trị viên Django) có thể nâng cấp API nếu một trường hợp chưa phát hiện được phát hiện gần đây hoặc được giới thiệu trong một phiên bản tương lai của Django?

Theo trường hợp sử dụng, có lẽ tấn cân nhắc khác để có, chẳng hạn như:

  • tính toàn vẹn của dữ liệu
  • hỗ trợ các giao dịch
  • thời gian của một truy vấn có thể cao hơn nhiều so với việc chỉ truy vấn cơ sở dữ liệu cục bộ (hoặc thậm chí từ xa).
Các vấn đề liên quan