сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Интеграции

SOAP и gRPC

SOAP и gRPC

Спрашивают, чтобы понять, работал ли ты за пределами REST. В банках и госсекторе SOAP жив и здоров, во внутренних контурах крупных компаний растёт gRPC, и оба появляются в вакансиях регулярно.

Стержень: у каждого протокола есть область, где он объективно лучше остальных. Ответ «SOAP устарел» довольно точно показывает, что человек никогда не имел дела с подписью сообщений и не понимает, зачем она вообще нужна.

// Формулировки: «когда возьмёшь gRPC?», «зачем сейчас SOAP?», «что опишешь для SOAP-интеграции?»

SOAP и подпись на уровне сообщения

SOAP - протокол обмена, где каждое сообщение упаковано в XML-конверт со служебным заголовком и телом. Контракт описывается отдельным файлом на языке WSDL (web services description language): в нём перечислены доступные операции, структуры данных и адреса. По этому файлу инструменты генерируют готового клиента, руками его писать не надо.

Многословен и тяжёл - это чистая правда, XML-конверт легко весит вдвое больше полезных данных. Но у SOAP есть то, чего у REST нет из коробки: набор расширений WS-Security подписывает и шифрует само сообщение, а не канал, по которому оно едет.

Разница принципиальная. HTTPS защищает участок передачи: пока данные летят по проводу, их не прочитать и не подменить. Как только сообщение доехало, легло в шину, потом в базу, потом в архив - от HTTPS не осталось ничего. Подпись же едет вместе с документом: достав его из архива через год, можно доказать, что он не менялся и пришёл именно от этой стороны.

// Именно поэтому в финансах SOAP не выкинули. Спор о содержании платёжного поручения возникает не в момент передачи, а через месяцы, когда канала давно нет, а документ есть.

gRPC: внутрь, а не наружу

gRPC устроен из двух частей. Транспорт - HTTP/2, который умеет держать много параллельных запросов в одном соединении и передавать потоки в обе стороны. Формат данных - Protobuf: описываешь структуру сообщения в отдельном файле схемы, а по проводу едут компактные двоичные данные без имён полей, только значения по порядку.

Отсюда его сильные стороны: сообщений уходит в разы меньше по объёму, контракт строгий, клиенты генерируются по схеме. Внутри своего контура, где сервисы дёргают друг друга тысячи раз в секунду, это заметная экономия.

И отсюда же слабые. Партнёру наружу нужен файл схемы и специальный инструментарий, обычным curl такой вызов не отладишь, а в браузере он без прослойки не работает вовсе. Двоичный формат нельзя открыть глазами и посмотреть, что пришло.

// Поэтому для публичных интерфейсов REST с JSON остаётся практичнее просто из-за порога входа. Любой партнёр умеет отправить HTTP-запрос и прочитать JSON-ответ, и никакой подготовки для этого не требуется.

Кодогенерация и наследуемые системы

У генерации клиента по контракту есть неочевидное достоинство. Сгенерированный код повторяет структуру схемы, поэтому переименование поля или смена типа у партнёра ломают сборку, а не прод. Ошибка обнаруживается в момент обновления схемы, когда починка стоит десять минут, а не ночью в проде, когда она стоит инцидента.

Отдельная типовая задача аналитика - встроить в современный ландшафт систему, которая умеет только обмен файлами по расписанию. Переписать её обычно нельзя: она работает двадцать лет, исходников половина, а автор давно на пенсии.

Тащить файловый обмен во все окружающие сервисы тоже вредно - устаревший протокол расползётся и останется навсегда. Правильное решение - адаптер: отдельный компонент забирает файл, разбирает его и публикует события в общую шину, а в обратную сторону собирает файл из сообщений.

// Смысл адаптера в изоляции: старый протокол живёт ровно в одной точке системы, и когда наследуемую систему наконец заменят, переписывать придётся только адаптер, а не двадцать потребителей.

Как отвечать: «Банк требует SOAP с подписью. Чем это лучше REST по HTTPS?»

Тем, что подпись живёт в самом сообщении, а не в канале. HTTPS защищает участок передачи: как только сообщение дошло и легло в шину или в базу, от этой защиты не остаётся ничего. WS-Security подписывает содержимое, и подпись едет вместе с документом - через год его можно достать из архива и доказать, что он не менялся и пришёл именно от этой стороны. В финансовых интеграциях это принципиально, потому что спор о содержании платёжного поручения возникает не в момент передачи, а сильно позже, когда канала давно нет. Многословность XML-конверта тут осознанная плата, и она дешевле, чем невозможность доказать свою правоту.

Ответ разводит защиту канала и защиту документа, объясняет, почему это важно именно в финансах, и признаёт цену решения вместо того, чтобы защищать протокол целиком.

На чём валятся

  • − Говорят «SOAP устарел», не понимая роли подписи на уровне сообщения.
  • − Выносят gRPC наружу партнёрам и получают высокий порог входа и неотлаживаемый обмен.
  • − Считают HTTPS достаточным там, где нужна доказуемость документа во времени.
  • − Тащат в документ интеграции внутреннее устройство партнёра вместо контракта.
  • − Предлагают переписать наследуемую систему вместо того, чтобы изолировать её адаптером.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 12, остальные разбираются в тренажёре.

  1. #ana_int_soap_grpc1 / 5
    В каком формате SOAP передаёт сообщения?
    A)XML
    B)JSON
    C)Protobuf
    D)CSV
    показать ответ и разбор
    +A)XML

    // разбор: SOAP жёстко привязан к XML: сообщение состоит из конверта с заголовком и телом. Отсюда его свойства — строгая типизация через XSD, встроенные стандарты безопасности и подписи, но заметная многословность и вес по сравнению с современными форматами.

  2. #ana_int_soap_grpc2 / 5
    На чём основан gRPC?
    A)На SOAP поверх HTTP/2
    B)На обмене XML-документами
    C)На HTTP/2 и Protobuf
    D)На собственном транспортном протоколе
    показать ответ и разбор
    +C)На HTTP/2 и Protobuf

    // разбор: gRPC использует HTTP/2 как транспорт и Protobuf как формат сериализации. Отсюда его сильные стороны: компактные бинарные сообщения, мультиплексирование запросов в одном соединении и потоковая передача в обе стороны. Плата — читаемость: сообщение нельзя посмотреть глазами без схемы.

  3. #ana_int_soap_grpc3 / 5
    Когда gRPC уместнее REST?
    A)Для публичного API с внешними партнёрами
    B)Для интеграции с браузером напрямую
    C)Для загрузки файлов пользователями
    D)Для частых вызовов между своими сервисами
    показать ответ и разбор
    +D)Для частых вызовов между своими сервисами

    // разбор: Внутри своего контура gRPC выигрывает: меньше накладных расходов, строгий контракт, кодогенерация клиентов, потоки. Наружу он неудобен — партнёру нужен файл схемы и специальный инструментарий, а отладка курлом невозможна. Для публичных интерфейсов REST с JSON остаётся практичнее.

  4. #ana_int_soap_grpc4 / 5
    Партнёр — банк, требует SOAP с подписью сообщений. Что это даёт против REST?
    A)Более высокую скорость обмена
    B)Стандартную подпись на уровне сообщения
    C)Меньший объём передаваемых данных
    D)Автоматическое повторение при сбоях
    показать ответ и разбор
    +B)Стандартную подпись на уровне сообщения

    // разбор: WS-Security даёт подпись и шифрование самого сообщения, а не только канала. Подписанный документ остаётся доказуемым после того, как прошёл через шину, был сохранён и извлечён через год — в отличие от HTTPS, который защищает лишь участок передачи. В финансах это принципиально.

  5. #ana_int_soap_grpc5 / 5
    Что должен зафиксировать аналитик, описывая интеграцию по SOAP?
    A)Версию языка программирования партнёра
    B)Марку сервера приложений
    C)Операции, типы, ошибки и адреса контуров
    D)Схему хранения данных у партнёра
    показать ответ и разбор
    +C)Операции, типы, ошибки и адреса контуров

    // разбор: Содержание контракта — набор операций, структуры запросов и ответов, перечень ошибок с кодами и адреса стендов для тестового и боевого контуров. Всё, что относится к внутреннему устройству партнёра, за границей интеграции и в документ не попадает: оно может измениться без предупреждения.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.