2009-08-05 36 views
5

Công ty của tôi có Cơ sở dữ liệu khổng lồ này được cung cấp (nhiều) sự kiện từ nhiều nguồn, cho mục đích theo dõi và báo cáo. Cho đến nay, mọi bảng điều khiển hoặc đồ họa mới từ dữ liệu là một ứng dụng Rails mới với các bảng phụ trong Cơ sở dữ liệu khổng lồ và truy cập đầy đủ vào nội dung cơ sở dữ liệu.Để truy cập API hoặc không

Gần đây, đã có một ý tưởng nổi về việc có các khách hàng bên ngoài (như công ty của chúng tôi, nhưng công ty chị em) với dữ liệu của chúng tôi và chúng tôi đã quyết định chúng ta nên hiển thị RESTful API chỉ đọc để tham khảo dữ liệu của chúng tôi .

Điểm của tôi là - chúng tôi có nên sử dụng API cho các dự án của riêng mình không? Có quá mức cần thiết để truy cập API RESTful, ngay cả đối với các dự án "cục bộ" thay vì truy cập trực tiếp vào cơ sở dữ liệu không? Tôi nghĩ rằng nó sẽ trả về việc hợp nhất quyền truy cập của nhóm chúng tôi vào dữ liệu - nhưng liệu nó có xứng đáng với chuyến đi khứ hồi thêm không? Và một API RESTful có thể theo kịp các yêu cầu của việc chạy 20 hoặc hơn các truy vấn mỗi giây và hiển thị các kết quả thông qua JSON không?

Cảm ơn mọi đầu vào!

Trả lời

5

Tôi nghĩ có rất nhiều điều để nói về tính nhất quán. Nếu bạn đang cung cấp API cho khách hàng của mình, có vẻ như với tôi rằng bằng cách sử dụng cùng một API, bạn sẽ hiểu nó tốt hơn. hỗ trợ nó cho khách hàng của bạn, bạn sẽ kiểm tra nó thường xuyên (ngoài các bài kiểm tra hồi quy) và bạn đang gửi một thông điệp đủ tốt để bạn sử dụng, vì vậy nó sẽ ổn cho khách hàng của bạn.

Bằng cách ẩn tất cả mọi thứ đằng sau các API, bạn đang ở tự do để thay đổi cơ quan đại diện cơ sở dữ liệu và không phải thay đổi cả mã giao diện API (để trình bày dữ liệu qua API) và mã truy cập cơ sở dữ liệu trong trong- của bạn ứng dụng nhà. Bạn chỉ thay đổi cái cũ.

Cuối cùng, các câu hỏi hiệu suất như vậy có thể thực sự chỉ được giải quyết bằng cách thử và đo lường. Có lẽ nó có giá trị gõ cùng một hệ thống API nguyên mẫu và nghiên cứu nó dưới tải?

1

Ngoài ra nếu bạn sử dụng Api trong nội bộ thì bạn sẽ có thể giảm số lượng mã bạn phải duy trì vì bạn sẽ chỉ duy trì API chứ không phải API và các phương thức nội bộ của riêng bạn để truy cập dữ liệu.

3

Tôi chắc chắn sẽ đi xuống tuyến đường API. Điều này thể hiện một giao diện dễ bảo trì cho TẤT CẢ các ứng dụng sẽ nói chuyện với ứng dụng của bạn, bao gồm xác thực, vv .. Chắc chắn bạn có thể đảm bảo tính toàn vẹn của cơ sở dữ liệu với các hạn chế cột và các thủ tục được lưu trữ, nhưng tại sao duy trì điều đó?

Đừng quên - bạn cũng có thể lưu lại các cuộc gọi API trong hệ thống tệp, bộ nhớ hoặc sử dụng memcached (hoặc bất kỳ dịch vụ nào khác). Trong trường hợp bộ dữ liệu không thay đổi (kiểm tra với updated_at hoặc etags), bạn có thể đơn giản trả về các phiên bản được lưu trong bộ nhớ cache để cải thiện tốc độ cực lớn. Việc thêm etags trong một ứng dụng gần đây mà tôi phát triển thấy thời gian tải HTML đi từ 1,6 giây đến 60 ms.

Tắt chủ đề: Ý tưởng mà tôi đang cân nhắc là tự động tải các phiên bản API tùy thuộc vào yêu cầu. Một cái gì đó như thế này sẽ cung cấp cho bạn khả năng thay đổi đáng kể API trong khi duy trì tính tương thích ngược. Vì các phiên bản khác nhau nằm trong các tệp riêng nên sẽ đơn giản để duy trì chúng một cách riêng biệt.

+0

+1 để giải quyết các mối quan tâm về hiệu suất với bộ nhớ cache và thẻ. – hsribei

+0

+1 quá, nhận xét thú vị;) – Leprosy

1

Tôi đã suy nghĩ về cùng một điều cho một dự án mà tôi sắp bắt đầu, cho dù tôi có nên xây dựng ứng dụng Rails của mình từ đầu như một khách hàng của API hay không.Tôi đồng ý với những ưu điểm đã được đề cập ở đây, mà tôi sẽ tóm tắt lại và thêm vào:

thiết kế
  • Better API: Bạn trở thành một người sử dụng API của bạn, vì vậy nó sẽ có rất nhiều bóng hơn khi bạn quyết định mở nó ra;
  • Độc lập cơ sở dữ liệu: với khớp nối giảm, sau đó bạn có thể chuyển từ RDBMS sang Kho tài liệu mà không thay đổi nhiều;
  • Hiệu suất tương tự: Hiệu suất có thể được giải quyết bằng bộ nhớ đệm HTTP (mặc dù tôi muốn xem một số con số so sánh cả hai).

Ngày đầu đó, bạn cũng có được:

  • Better testability: lý toàn bộ doanh nghiệp của bạn là hộp đen kiểm chứng với cơ bản HTTP resquest/phản ứng. Trình duyệt không đầu/Selenium chỉ chịu trách nhiệm về hành vi ứng dụng cụ thể;
  • Độc lập front-end: bạn không chỉ tự do thay đổi biểu diễn cơ sở dữ liệu, bạn được tự do thay đổi toàn bộ giao diện người dùng, từ vanilla Rails-with-HTML-và-reloads, để sprinkled-Ajax, với javascript thuần túy (ví dụ: với GWT), tất cả đều chia sẻ cùng một kết thúc.

trích

Một vấn đề ban đầu tôi thấy với cách tiếp cận này là nó sẽ làm cho tôi mất tất cả các tiện nghi và linh hoạt mà ActiveRecord cung cấp, với các hiệp hội, named_scopes và tất cả. Nhưng sử dụng API thông qua ActveResource mang lại rất nhiều thứ tốt, và có vẻ như bạn cũng có thể có named_scopes. Không chắc chắn về các liên kết.

Nhiều chỉ trích, xin vui lòng

Chúng tôi đã tất cả ca hát về sự vinh hiển của phương pháp này nhưng, mặc dù một câu trả lời đã được chọn, tôi muốn được nghe từ người khác những vấn đề có thể cách tiếp cận này có thể mang lại, và tại sao chúng ta không nên sử dụng nó.

+0

Một lời chỉ trích chính (hoặc, nhiều khả năng, một mối quan tâm chính) có thể là các khía cạnh bảo mật – Leprosy

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