Ответ
REST — это архитектурный стиль для построения API поверх HTTP. Он использует ресурсы (URL), методы (GET, POST, PUT, DELETE) и стандартные статус-коды. Данные обычно передаются в текстовых форматах, таких как JSON или XML. Это делает REST простым для понимания, отладки и интеграции, особенно с веб-приложениями, но менее эффективным по производительности и размеру передаваемых данных.
gRPC — это современный высокопроизводительный фреймворк для удаленного вызова процедур (RPC) от Google. Он использует HTTP/2 в качестве транспортного протокола и бинарный формат Protocol Buffers (Protobuf) для сериализации данных. gRPC обеспечивает строгую типизацию, автоматическую генерацию кода клиента/сервера и поддерживает различные режимы потоковой передачи (унарный, серверный, клиентский, двунаправленный).
Ключевые отличия с точки зрения тестировщика:
| Аспект | REST | gRPC |
|---|---|---|
| Контракт | Описывается в документации (OpenAPI/Swagger). | Четко определяется в .proto-файле. Тестировщик может использовать сгенерированный код для создания запросов. |
| Формат данных | Текстовый (JSON/XML), легко читается и модифицируется вручную (например, в Postman). | Бинарный (Protobuf). Для создания/чтения запросов нужны специальные инструменты или сгенерированные классы. |
| Производительность | Ниже из-за накладных расходов текстовых форматов. | Выше благодаря бинарному формату и использованию HTTP/2 (мультиплексирование, сжатие заголовков). |
| Поддержка потоков | Нет нативной поддержки. Реализуется через WebSockets или Server-Sent Events. | Есть нативная поддержка всех видов потоковой передачи на уровне протокола. |
| Инструменты тестирования | Postman, Insomnia, curl, встроенные в код HTTP-клиенты. | BloomRPC, gRPCurl, evans, генерация клиентов на основе .proto-файла для интеграционных тестов. |
Пример тестирования REST (используя curl):
curl -X GET https://api.example.com/users/123
-H "Content-Type: application/json"
Пример тестирования gRPC (используя grpcurl):
grpcurl -plaintext -proto user_service.proto
-d '{"id": "123"}'
localhost:50051 UserService.GetUser
При тестировании gRPC-сервисов важно проверять не только успешные сценарии, но и корректность обработки ошибок (status codes), работу стримов и соответствие данных строгой схеме Protobuf.