REST — текстовый (JSON), работает поверх HTTP/1.1, используется для публичных API и фронтенда. gRPC — бинарный (protobuf), работает поверх HTTP/2, используется для межсервисного взаимодействия.
REST: универсальный, легко дебажить в браузере, человекочитаемый. gRPC: быстрее в 5-10 раз, строгий контракт (.proto), стриминг, кодогенерация клиентов.
На практике часто комбинируют: gRPC между микросервисами, REST/gRPC-gateway наружу для фронтенда и мобилок. grpc-gateway позволяет из одного .proto файла получить и gRPC-сервер, и REST API одновременно. Для real-time и высоконагруженных систем gRPC однозначно выигрывает.