В предыдущем своем посте я рассказала о том, как настроить и использовать фреймворк gRPC. Сегодня хочу поделиться особенностями работы с ним.
1️⃣ Потоковая передача данных
gRPC поддерживает несколько типов RPC:
🔴Унарные (один запрос — один ответ)
🔴Серверные потоки (один запрос —поток ответов)
🔴Клиентские потоки (поток запросов — один ответ)
🔴Двунаправленные потоки (поток запросов — поток ответов)
2️⃣ Обработка ошибок
gRPC использует статусные коды для индикации ошибок. Основные статусы:
OK (0) — успех
CANCELLED (1) — операция отменена
UNKNOWN (2) — неизвестная ошибка
INVALID_ARGUMENT (3) — неверные аргументы
DEADLINE_EXCEEDED (4) — превышено время ожидания
NOT_FOUND (5) — ресурс не найден
PERMISSION_DENIED (7) — нет прав
UNAUTHENTICATED (16) — не аутентифицирован
3️⃣ Аутентификация
gRPC поддерживает несколько механизмов аутентификации:
🔴SSL/TLS с сертификатами
Пример:
ChannelCredentials.secure(certificates: certs)🔴JWT (JSON Web Tokens)
Пример:
CallOptions(metadata: {'authorization': 'Bearer $token'})🔴Basic Auth
Пример:
'Basic ${base64Encode('login:pass')}'🔴OAuth2
Пример:
AuthInterceptor(OAuthCredentials())🔴API Keys
Пример:
CallOptions(metadata: {'x-api-key': key})🔴Интерсепторы
Пример:
Кастомные ClientInterceptor🔴mTLS (Mutual TLS)
Пример:
ChannelCredentials.secure(clientCertificates: clientCert)Преимущества:
✅Высокая производительность
✅Кросс-языковая поддержка
✅Встроенная генерация клиентского и серверного кода
✅Поддержка потоковой передачи данных
✅Нативные механизмы аутентификации и шифрования
Ссылки на библиотеки: grpc, probuf, protoc_plugin.
gRPC может показаться сложным на первых этапах, но его преимущества окупаются в средних и крупных проектах, особенно когда важны производительность и типобезопасность. Был ли у вас опыт работы с gRPC?
