REST не вимагає JSON або HTTP / 1.1
Ви можете тривіально побудувати послугу RESTful, яка надсилає протобуфні повідомлення (або що завгодно) через HTTP / 2
Ви можете створювати RESTful сервіси, які надсилають JSON через HTTP / 2
Ви можете створювати RESTful сервіси, які надсилають протобуфні повідомлення через HTTP / 1.1
Сервіси RESTful не є "хаком" поверх HTTP / xx, це служби, що слідують за основними архітектурними принципами, які зробили успішною будь-яку версію HTTP (наприклад, кешированість GET-запитів та перезавантаження PUT-запитів).
gRPC, SOAP та ін. al більше схожі на хаки - хаки поверх HTTP для тунелювання служб у стилі RPC через HTTP, для маршрутизації обмежень між брандмауером та середнім ящиком. Це не обов'язково погано. Іноді ви можете захотіти послугу в стилі RPC замість REST, і ми мусимо жити у світі, де середні скриньки важко замінити.
Якщо у вас немає часу прочитати фактичне визначення REST:
https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Завжди є TLDR; версія у Вікіпедії:
https://en.wikipedia.org/wiki/Representational_state_transfer
Якщо вам потрібна послуга в стилі RPC, звичайно, gRPC - це чудово. Якщо ви хочете жити в Інтернеті або хочете отримати всі переваги, що надаються послугою стилю RESTful, тоді створіть послугу стилю RESTful. І якщо занадто повільно серіалізувати / десеріалізувати дані у форматі JSON у вашому спокійному сервісі, цілком нормально використовувати протобуф або будь-що інше.
Якщо gRPC є версією 2 будь-чого, це версія 2 SOAP. Той, який не страшний, як SOAP.
І, ні, ви не можете просто "зателефонувати на будь-яку функцію" у вашому GET-запиті та отримати послуги RESTful.
Останнє: якщо ви збираєтесь використовувати протобуфи через службу RESTful, будь ласка, зробіть це правильно, використовуючи заголовки типу вмісту тощо. З цим ви можете легко підтримувати як JSON, так і протобуф.
Відступивши від мого SOAP-коробки зараз ..;)