IMO, điểm quan trọng là hành động so với định hướng tài nguyên. REST được định hướng tài nguyên và phù hợp với các hoạt động CRUD và do ngữ nghĩa đã biết của nó cung cấp một số dự đoán cho người dùng đầu tiên, nhưng khi được thực hiện từ các phương thức hoặc thủ tục buộc bạn phải cung cấp bản dịch nhân tạo cho thế giới tập trung tài nguyên. Mặt khác, RPC hoàn toàn phù hợp với các API hướng hành động, nơi bạn trưng bày các dịch vụ, chứ không phải các bộ tài nguyên có thể CRUD.
Không còn nghi ngờ gì nữa, REST phổ biến hơn, điều này chắc chắn sẽ thêm một số điểm nếu bạn muốn tiết lộ API cho bên thứ ba.
Nếu không (ví dụ trong trường hợp tạo giao diện AJAX trong SPA), lựa chọn của tôi là RPC. Cụ thể là JSON-RPC, kết hợp với Lược đồ JSON làm ngôn ngữ mô tả và được vận chuyển qua HTTP hoặc Websockets tùy theo trường hợp sử dụng.
JSON-RPC là một đặc tả đơn giản và thanh lịch xác định các tải trọng JSON yêu cầu và đáp ứng sẽ được sử dụng trong RPC đồng bộ hoặc không đồng bộ.
Lược đồ JSON là đặc tả dự thảo xác định định dạng dựa trên JSON nhằm mô tả dữ liệu JSON. Bằng cách mô tả các thông báo đầu vào và đầu ra dịch vụ của bạn bằng Lược đồ JSON, bạn có thể có sự phức tạp tùy ý trong cấu trúc thông báo mà không ảnh hưởng đến khả năng sử dụng và tích hợp dịch vụ có thể được tự động hóa.
Việc lựa chọn giao thức truyền tải (HTTP so với websockets) phụ thuộc vào các yếu tố khác nhau, là điều quan trọng nhất cho dù bạn cần các tính năng HTTP (bộ nhớ đệm, xác nhận lại, an toàn, idempotence, loại nội dung, nhiều phần, ...) hoặc liệu ứng dụng của bạn có cần trao đổi không tin nhắn ở mức cao.
Cho đến bây giờ rất nhiều ý kiến cá nhân của tôi về vấn đề này, nhưng bây giờ một cái gì đó có thể thực sự hữu ích cho những nhà phát triển Java đang đọc những dòng này, khuôn khổ mà tôi đã làm việc trong năm ngoái, xuất phát từ cùng một câu hỏi mà bạn đang tự hỏi :
http://rpc.brutusin.org
Bạn có thể xem bản demo trực tiếp tại đây, hiển thị trình duyệt kho lưu trữ tích hợp để kiểm tra chức năng (cảm ơn Lược đồ JSON) và một loạt các dịch vụ ví dụ:
http://demo.rpc.brutusin.org
Hy vọng nó sẽ giúp bạn đời!
Nacho