Какие методы синхронного взаимодействия существуют и когда они применяются
Что проверяют
Понимаете ли вы, чем синхронная интеграция отличается от асинхронной и как это влияет на требования, которые вы пишете. Аналитику мало назвать протоколы, нужно объяснить выбор и описать контракт. Следом обычно спрашивают, когда бы вы выбрали очередь вместо API.
Как отвечать
Синхронное взаимодействие: вызывающая система отправляет запрос и ждёт, пока не получит результат или не упрётся в таймаут. Основные варианты:
- REST поверх HTTP: ресурсы, методы
GET,POST,PUT,DELETE, JSON, контракт в OpenAPI. Стандарт для веба и большинства внутренних интеграций; - SOAP: XML, контракт в WSDL и XSD, набор стандартов WS-Security. Живёт в банках, госсистемах и старых ERP;
- gRPC: бинарный Protobuf поверх HTTP/2, контракт в
.proto, генерация клиентов. Хорош между внутренними сервисами, из браузера работает только через gRPC-Web; - GraphQL: одна точка входа и схема, клиент сам запрашивает нужные поля. Удобен для фронтенда с разными экранами.
Когда синхронный вызов уместен: пользователю нужен ответ сразу (проверка остатка, авторизация платежа, валидация), операция короткая, результат нужен для следующего шага. Когда нет: долгие операции, событие для многих получателей, нестабильная смежная система. Там лучше брокер сообщений вроде Kafka или RabbitMQ либо вебхук.
Покажите, что вы фиксируете в требованиях: методы и поля с типами и обязательностью, коды и формат ошибок, таймауты и допустимую нагрузку, поведение при повторе (идемпотентность, например ключ запроса в заголовке), версионирование, диаграмму последовательности.
Где спотыкаются
Относят WebSocket к синхронным методам. Это постоянный двусторонний канал, сообщения идут в обе стороны без пары «запрос и ответ».
Забывают про отказ смежника. Цепочка синхронных вызовов складывает задержки, а падение одного сервиса роняет всю цепочку, если не описаны таймауты, повторы и запасной сценарий.
Утверждают, что SOAP безопаснее REST. Безопасность задают транспорт и авторизация: REST поверх HTTPS с OAuth 2.0 даёт сопоставимый уровень.