Ответ
REST (Representational State Transfer) — это архитектурный стиль, а не протокол. Он использует HTTP как транспорт и опирается на его методы (GET, POST, PUT, DELETE), статус-коды и концепцию ресурсов (идентифицируемых через URI). Данные обычно передаются в текстовых форматах (JSON, XML).
gRPC (gRPC Remote Procedure Calls) — это современный фреймворк для удаленного вызова процедур (RPC). Он использует HTTP/2 в качестве транспорта и бинарный формат Protocol Buffers (protobuf) по умолчанию для сериализации и определения контракта сервиса.
| Сравнительная таблица: | Критерий | REST (обычно с JSON) | gRPC (с Protocol Buffers) |
|---|---|---|---|
| Контракт | Неформальный (OpenAPI/Swagger — опционально) | Строгий, обязательный .proto файл |
|
| Протокол/Транспорт | HTTP/1.1 (чаще) | HTTP/2 (обязательно) | |
| Формат данных | Текстовый (JSON/XML), человекочитаемый | Бинарный (protobuf), компактный и быстрый | |
| Парадигма | Ориентирована на ресурсы (существительные) | Ориентирована на действия/методы (глаголы) | |
| Потоковая передача | Ограничена (WebSocket, SSE для push) | Встроенная поддержка на уровне HTTP/2: • Унарный (один запрос - один ответ) • Серверный поток • Клиентский поток • Двунаправленный поток |
|
| Производительность | Ниже из-за текстового формата и HTTP/1.1 | Выше благодаря бинарному protobuf, HTTP/2 и мультиплексированию | |
| Поддержка браузера | Полная (fetch, XHR) | Ограничена (требуется gRPC-Web и прокси) |
Пример определения сервиса в gRPC (.proto файл):
syntax = "proto3";
service UserService {
rpc GetUser (GetUserRequest) returns (User); // Унарный вызов
rpc StreamNotifications (NotificationRequest) returns (stream Notification); // Серверный поток
}
message GetUserRequest {
int32 user_id = 1;
}
message User {
int32 id = 1;
string name = 2;
string email = 3;
}
Когда что выбирать:
- REST/JSON: Публичные API, веб- и мобильные клиенты, где важна простота интеграции и человекочитаемость.
- gRPC: Внутренняя коммуникация между микросервисами, среды с высокими требованиями к производительности и задержкам, системы, нуждающиеся в потоковой передаче данных.