2012-02-13 12 views
8

Tôi có một giao diện web Django tiêu thụ dữ liệu từ một chương trình phụ trợ REST API. Ngay cả người dùng được tạo và tạo trên chương trình phụ trợ.Django: Dự án tiêu thụ dữ liệu từ REST API, Cách sử dụng các ứng dụng bên ngoài trong hệ thống này?

Vấn đề của tôi:

  • Làm thế nào để sử dụng ứng dụng của bên thứ 3 trong hệ thống này, mà rất nhiều phụ thuộc vào django mô hình/ORM?
  • Có điều gì đó có thể cung cấp một số cầu nối giữa các tài nguyên API REST API và ORM không?

Sự cố này có thể được giải quyết như thế nào?

Cập nhật

DRY chính có vẻ là không trong tình huống này.

+2

Đối với những gì đáng giá, tôi không biết bất kỳ cách nào tốt (hoặc thậm chí không tốt) để thực hiện việc này. –

+0

Cho phép xem, nếu chúng ta có thể tìm một người có thể tư vấn cho một giải pháp cho tình huống này. –

+0

Có, tôi sẽ quan tâm để xem giải pháp, nếu có. –

Trả lời

-3

Tôi không chắc mình hoàn toàn hiểu câu hỏi hoặc yêu cầu của bạn. Cách tôi đang đọc nó, bạn có một back-end chính mà về cơ bản là một hộp đen, và bạn muốn sử dụng một số ứng dụng của bên thứ 3 trong dự án của bạn sử dụng Django ORM.

Tôi không rõ lý do tại sao sẽ có nhu cầu có thể có đồng bộ hóa hai chiều giữa hai kho dữ liệu. Người dùng dự án của bạn sẽ được trả về dữ liệu từ back-end chính của bạn và từ ORM của dự án.

Vì bạn lo ngại về việc lưu dữ liệu "ORM" trong back-end chính của mình, có thể bạn sẽ xem xét việc tạo một Middleware giao dịch có thể kích hoạt bất kỳ dữ liệu ORM nào được cập nhật, có thể tuần tự hóa cấu trúc đang được lưu và truyền vào API REST của bạn. API REST này, tôi giả sử, có thể chấp nhận cấu trúc dữ liệu tùy ý không?

Có thể bạn sẽ muốn sử dụng một số hình thức của middleware và có thể là mô-đun/lớp tiện ích để giúp tạo thành "cầu nối".

+0

Hm .. middleware sẽ hoạt động trước và sau khi xem. Nhưng các cuộc gọi DB thường được thực hiện trong các khung nhìn, vậy làm thế nào một phần mềm trung gian có thể thực hiện được phép thuật? –

+0

@YugalJindle, sử dụng TransactionMiddleware. Xem https://docs.djangoproject.com/en/dev/topics/db/transactions/. – imm

+0

Thú vị .. Tôi nghĩ rằng đó là hữu ích. Bạn có thể liên kết với một dự án sử dụng kỹ thuật cầu nối tương tự không? –

-2

Tôi đang đối mặt với một trở ngại tương tự với một dự án thương mại điện tử mới. Dự án này là một kết thúc trước cho một phần mềm quản lý cửa hàng chính thức (CMS + ERP + CRM). Nó cần phải sử dụng cơ sở dữ liệu sản phẩm chính, nhưng có các mục riêng của nó cho các đánh giá sản phẩm, xếp hạng, v.v.

Ý tưởng ban đầu là tạo bản sao lưu cơ sở dữ liệu chính được lưu trong bộ nhớ cache. Trang web sẽ được hưởng lợi từ thời gian tải nhanh cho các mục được lưu trong bộ nhớ cache, nhưng việc triển khai không phải là nhỏ.

Sau khi cân nhắc một số, cách tiếp cận đã chọn đang cập nhật DB của trang web từ chương trình quản lý. Bằng cách này, bản sao của trang web sẽ luôn chính xác và hầu hết việc triển khai không cần phải lo lắng về các dịch vụ REST (nó vẫn sẽ được sử dụng để đăng ký người dùng, theo dõi lô hàng, v.v.)

Trong trường hợp của bạn, nơi bạn không thể cập nhật dịch vụ cơ sở dữ liệu của riêng bạn từ xa, bạn cần phải đưa ra một cơ chế cho phép bạn tham khảo REST recourses như các mô hình thông thường và lưu trữ chúng trong nền.

Lưu ý quan trọng: nghiên cứu cách đảm bảo bộ nhớ cache luôn chính xác (không bẩn) ...

+0

Có một số dự án mã nguồn mở sử dụng giải pháp như vậy không? –

0

Có thể mọi thứ đã thay đổi vì câu hỏi này đã được đăng ban đầu. Bây giờ có một vài câu hỏi thú vị liên quan đến StackOverflow về chủ đề này.

Để tự mã hóa giải pháp như được giải thích in this answer, bạn có thể tạo một lớp dịch vụ bên ngoài (aka services.py) và viết logic đó để truy cập các tài nguyên bên ngoài. Quan điểm của bạn sẽ tiêu thụ lớp này và thực hiện các hành động thích hợp. Có những câu hỏi khác mà cung cấp sự giúp đỡ về cách chuyển thông tin từ các yêu cầu ban đầu nhận được django-view với dịch vụ bên ngoài như this hoặc this

Ngoài ra còn có một ứng dụng django mà sẽ đưa tình huống này vào tài khoản như đã giải thích in this answer. django-roa sử dụng mô hình Resource Oriented Architecture để giải quyết vấn đề này.

Các vấn đề liên quan