Lời hứa của REST luôn là uniform interface. Một máy khách REST lý tưởng sẽ có thể nói chuyện với một loạt các tài nguyên RESTful, ngay cả những tài nguyên không tồn tại khi khách hàng được mã hóa.
Thật không may, lý tưởng này chưa bao giờ thực sự được mô tả hóa trừ trường hợp gốc của REST - World Wide Web của các tài liệu có thể đọc được. Tại thời điểm này, hầu hết các giao diện tự gọi là “RESTful” thực sự là một kiểu RPC baroque, nơi dữ liệu yêu cầu và phản hồi được bôi đen trên các phương thức, chuỗi truy vấn, tiêu đề, mã trạng thái, tải trọng, tất cả trong một loạt các mong manh định dạng.
Hầu hết tính đồng nhất trong giao diện “RESTful” ngày nay đều nằm trong phần đầu của nhà phát triển. Họ “biết” rằng POST /orders/
có thể sẽ thêm một đơn đặt hàng mới. Nhưng họ vẫn phải lập trình cho khách hàng của mình “biết” điều đó, đối với mỗi API họ nói chuyện, thường gây ra nhiều lỗi.
Tuy nhiên, có một số tính đồng nhất có thể thực sự hữu ích trong mã.Ví dụ, nếu bạn có một API "RESTful", thì bạn thường có thể thêm một lớp bộ đệm trong suốt, có thể điều chỉnh tinh vi vào nó gần như miễn phí. Điều này là có thể vì thông điệp HTTP (ngữ nghĩa chính xác) đã mang tất cả thông tin chuẩn hóa cần thiết cho bộ nhớ đệm: phương thức yêu cầu, URL, mã trạng thái, Cache-Control
, Vary
và tất cả những điều đó. Trong gRPC, bạn phải cuộn bộ nhớ đệm của riêng mình.
Nhưng lý do thực sự cho sự thống trị hiện tại của “REST” không phải là loại trợ cấp nhỏ này. Đó thực sự chỉ là sự thành công của World Wide Web. Tại một thời điểm nào đó trong lịch sử, nó đã transpired rằng tất cả mọi người đã có một máy chủ HTTP linh hoạt, hoạt động (để phục vụ trang web của họ) và một máy khách HTTP rắn (để xem trang web), vì vậy khi mọi người bắt đầu thêm tài nguyên có thể đọc được, nó chỉ đơn giản là dễ dàng hơn và rẻ hơn để dính vào cùng một cách HTTP. Họ đã sử dụng các phương thức HTTP và các tiêu đề và mã trạng thái vì đó là những gì các máy chủ Web của họ đã hiểu và đã đăng nhập. Các công cụ như PHP cho phép họ thực hiện điều này với chi phí triển khai bằng không trên các trang web thông thường của họ.
Nếu tính đồng nhất và liên kết với World Wide Web không quan trọng đối với bạn, thì RPC là một sự lựa chọn kiến trúc thực sự và cố gắng, và gRPC là một thực hiện vững chắc có thể giúp bạn giải quyết một số rắc rối, như ɥɔɐɯuıɥɔɐɯ giải thích.
P.s. Tôi nên làm rõ rằng tôi không mong đợi một câu trả lời đúng, chủ yếu là chính xác, mà là một cuộc thảo luận về kinh nghiệm của các nhà phát triển khi tiếp cận những lựa chọn công nghệ này. – nmurthy