Khi nói đến một ứng dụng lớn với cơ sở dữ liệu khổng lồ chứa hàng triệu bản ghi, bạn sẽ sớm nhận ra, lựa chọn đơn giản, cập nhật, chèn và xóa đơn giản là không đủ.
Vì vậy, bạn bắt đầu suy nghĩ theo một cách khác. Bạn tạo các thủ tục và trình kích hoạt để xử lý các công cụ phức tạp hơn trực tiếp trong cơ sở dữ liệu và điều này không tốt lắm. Cơ sở dữ liệu cung cấp hiệu suất tuyệt vời khi thực hiện các hoạt động CRUD. Thủ tục lâu? Không nhiều lắm.
Vấn đề với thủ tục
Bây giờ hãy tưởng tượng, bạn chuyển sang một cơ sở dữ liệu không hỗ trợ khái niệm thủ tục? Bạn định làm gì? Thay vào đó, bạn buộc phải chuyển các thủ tục sang cơ sở mã của mình, nơi bạn có thể khá chắc chắn rằng một khi bạn lập trình nó trong Java, nó sẽ luôn ở đó, bất kể bạn chọn công cụ cơ sở dữ liệu nào.
Chưa kể, các thủ tục của bạn thường là một phần của logic kinh doanh của bạn và không nên để logic kinh doanh của bạn được phân bổ trên cơ sở dữ liệu và cơ sở dữ liệu của bạn.
Tốt nhất, bạn nên luôn có một người trung gian giữa cơ sở dữ liệu và khách hàng thực hiện các quy tắc kinh doanh của riêng mình. Cung cấp quyền truy cập trực tiếp vào cơ sở dữ liệu không phải là một ý tưởng hay, bởi vì khi bạn làm như vậy, người có quyền truy cập có quyền truy cập trực tiếp vào các bảng và có thể thực hiện bất kỳ điều gì với dữ liệu có.
Nhược điểm
- Mất nhiều thời gian hơn để phát triển: Tất nhiên, bạn đang tạo một hệ thống mới, việc này sẽ tốn nhiều thời gian hơn là chỉ đơn giản là cung cấp cho khách hàng một chuỗi kết nối cơ sở dữ liệu và để anh ta viết các truy vấn.
- Phức tạp hơn: Độ phức tạp của một hệ thống> độ phức tạp của truy vấn cơ sở dữ liệu.
- Máy chủ làm nhiều việc hơn: Không nhất thiết. Với thiết kế tốt, bộ nhớ đệm, ... bạn có thể di chuyển tải từ máy chủ cơ sở dữ liệu đến một trong các trung gian hòa giải.
- Chậm hơn: Về mặt phát triển? Đúng. Về tốc độ khi lấy dữ liệu? Không. Bạn có thể tối ưu hóa trình hòa giải của mình bằng cách sử dụng bộ nhớ cache (chẳng hạn như - phổ biến kể từ tháng 1 năm 2016 - Redis, Elaticsearch) và thực sự làm cho nó cung cấp dữ liệu nhanh hơn truy vấn cơ sở dữ liệu đơn giản.
Ưu điểm
- Di chuyển sang các nền tảng khác dễ dàng hơn: Di chuyển sang một công cụ cơ sở dữ liệu mới? Chắc chắn rồi. Di chuyển toàn bộ hòa giải sang một ngôn ngữ mới? Không hẳn vậy.
- Logic nghiệp vụ cũng cần thiết khi gọi trực tiếp cơ sở dữ liệu. Sẽ không mất nhiều thời gian để phát triển: Như đã giải thích trước đây, vấn đề thủ tục.
- Bảo mật: Với ủy quyền thích hợp, có hòa giải viên chắc chắn an toàn hơn nhiều so với việc cho phép người dùng truy cập trực tiếp vào cơ sở dữ liệu, bởi vì bạn hạn chế anh ta đến các điểm cuối chỉ chạy các truy vấn bạn muốn.
- Khả năng bảo trì: Một trong những lợi ích tốt nhất của việc có một hòa giải viên. Nếu có lỗi trong API mà khách hàng của bạn gọi, bạn sửa nó, đẩy bản sửa lỗi đến kho lưu trữ VCS của bạn, xây dựng trình hòa giải của bạn từ phiên bản hiện tại của VCS có chứa bản sửa lỗi và tất cả các máy khách của bạn đột nhiên sử dụng bản sửa lỗi mà không cần chúng phải sửa tải về một bản cập nhật. Điều này chỉ đơn giản là không thể làm được, nếu các truy vấn được lưu trữ trực tiếp trong các ứng dụng khách. Trong trường hợp đó, khách hàng buộc phải cập nhật ứng dụng của họ.
Security issues
là một bất lợi cho REST-API?