REST không yêu cầu JSON hoặc HTTP / 1.1
Bạn có thể dễ dàng xây dựng một dịch vụ RESTful gửi tin nhắn protobuf (hoặc bất cứ thứ gì) qua HTTP / 2
Bạn có thể xây dựng các dịch vụ RESTful gửi JSON qua HTTP / 2
Bạn có thể xây dựng các dịch vụ RESTful gửi tin nhắn protobuf qua HTTP / 1.1
Các dịch vụ RESTful không phải là "hack" trên HTTP / xx, chúng là các dịch vụ tuân theo các nguyên tắc kiến trúc cơ bản đã làm cho bất kỳ phiên bản HTTP nào thành công (như khả năng lưu trong bộ nhớ cache của các yêu cầu GET và khả năng phát lại các yêu cầu PUT).
gRPC, SOAP, et. al giống như hack - hack trên HTTP để tạo đường hầm cho các dịch vụ kiểu RPC qua HTTP, để định tuyến xung quanh các hạn chế của tường lửa và hộp trung gian. Đó không hẳn là một điều xấu. Đôi khi bạn có thể muốn một dịch vụ kiểu RPC thay vì một dịch vụ REST, và chúng ta phải sống trong một thế giới mà các hộp trung gian rất khó thay thế.
Nếu bạn không có thời gian để đọc định nghĩa thực tế của REST:
https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Luôn có TLDR; phiên bản trên wikipedia:
https://en.wikipedia.org/wiki/Representational_state_transfer
Nếu bạn cần một dịch vụ kiểu RPC, chắc chắn, gRPC rất tuyệt. Nếu bạn muốn sống trên web, hoặc bạn muốn tất cả những lợi ích đi kèm với dịch vụ theo phong cách RESTful, thì hãy xây dựng một dịch vụ theo phong cách RESTful. Và nếu quá chậm để tuần tự hóa / giải mã hóa dữ liệu ở định dạng JSON trong dịch vụ yên tĩnh của bạn, bạn hoàn toàn có thể sử dụng protobuf hoặc bất cứ thứ gì.
Nếu gRPC là phiên bản 2 của bất kỳ thứ gì, thì đó là phiên bản 2 của SOAP. Một thứ không khủng khiếp, như SOAP.
Và, không, bạn không thể chỉ "gọi bất kỳ chức năng nào" trong yêu cầu GET của mình và có một dịch vụ RESTful.
Một điều cuối cùng: nếu bạn định sử dụng protobufs qua một dịch vụ RESTful, hãy làm đúng, sử dụng tiêu đề loại nội dung, v.v. Với điều đó, bạn có thể dễ dàng hỗ trợ cả JSON VÀ protobuf.
Bước xuống từ hộp SOAP của tôi bây giờ ..;)