Tôi hiện đang làm việc trên một dự án với một tổ chức như sau:
- Máy khách - Nhận dữ liệu từ máy chủ chính qua REST api.
- Máy chủ - Yêu cầu dữ liệu từ nhiều máy chủ khác thông qua API của bên thứ ba
- API của bên thứ ba - Các dịch vụ ngoài tầm kiểm soát của tôi cung cấp dữ liệu cho máy chủ (Reddit, Hackernews, Quora, v.v.)
Để tranh luận, giả sử khách hàng trước tiên cần một danh sách các mục từ mỗi API của bên thứ ba. Từ danh sách này, một mục sẽ được chọn tại điểm mà khách hàng cần để xem toàn bộ nội dung của mục cũng như phản hồi (tức là nhận xét) cho mục đó. Tôi đang cố gắng quyết định giữa ba lựa chọn:
A la Carte
Trong phương pháp này, tôi sẽ có 3 điểm cuối riêng biệt trên máy chủ của mình: một để lấy danh sách các mục, một để lấy nội dung chính cho một mục và một để nhận phản hồi của mục đó.
- Ưu điểm: Tôi không bao giờ thực hiện nhiều yêu cầu hơn tôi cần, các yêu cầu nên nhỏ nên thường chúng sẽ nhanh hơn.
- Nhược điểm: Tôi phải thực hiện rất nhiều yêu cầu. Sau khi chọn một mục từ danh sách, người dùng có thể phải đợi trước khi xem nội dung chính và sau đó đợi lâu hơn để xem phản hồi
Bộ đệm phía máy chủ
Trong yêu cầu này, tôi sẽ thực hiện một cuộc gọi đến máy chủ của mình để "tìm nạp" tất cả dữ liệu cho tất cả các nguồn. Dữ liệu sau đó sẽ được lưu trữ trên máy chủ. Sau đó, máy khách sẽ có các điểm cuối REST giống như trước đây, ngoại trừ sẽ không có nhiều sự chờ đợi giữa các cuộc gọi vì máy chủ của tôi đã có dữ liệu và chỉ phải cung cấp dữ liệu đó cho máy khách.
- Ưu điểm: Vẫn dễ thực hiện ở phía máy khách, nhưng không có vấn đề về độ trễ
- Nhược điểm: Phía máy chủ liên quan nhiều hơn một chút và cuộc gọi đầu tiên có thể thực sự mất nhiều thời gian.
Bộ nhớ cache phía máy khách
Kịch bản này tương tự như kịch bản trước trừ khách hàng chỉ thực hiện một yêu cầu đến máy chủ: cung cấp cho tôi tất cả dữ liệu. Từ đây, trách nhiệm của khách hàng là lưu dữ liệu và sử dụng nó một cách thích hợp.
- Ưu điểm: Triển khai máy chủ dễ dàng, rất nhanh sau cuộc gọi đầu tiên
- Nhược điểm: Cuộc gọi đầu tiên sẽ rất chậm, triển khai phía khách hàng phức tạp hơn
Tôi không chắc đó là cách tiếp cận tốt nhất, hoặc nếu có thể tôi đang thiếu giải pháp rõ ràng. Bất kỳ lời khuyên sẽ được đánh giá rất cao!