Какие основные способы интеграции и взаимодействия между разными системами?

«Какие основные способы интеграции и взаимодействия между разными системами?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные способы взаимодействия:

  1. Файловый обмен: Системы обмениваются структурированными файлами (CSV, XML, JSON) через общие каталоги, FTP/SFTP. Минусы: Задержки, проблемы с согласованностью.

  2. Общая база данных: Системы работают с одной БД или реплицированными схемами. Риски: Жёсткая связность, сложность эволюции схемы.

  3. Синхронные API (Запрос-Ответ):

    • RESTful API (HTTP/JSON): Самый распространённый стандарт для веб-сервисов. Использует методы GET, POST, PUT, DELETE.
      # Пример вызова REST API
      import requests
      resp = requests.post('https://api.payment.com/charge', 
                       json={'amount': 100, 'currency': 'USD'},
                       headers={'API-Key': 'secret'})
    • gRPC: Высокопроизводительный RPC-фреймворк от Google, использует Protocol Buffers и HTTP/2. Идеален для внутренней связи микросервисов.
    • SOAP: Стандарт на основе XML, строгие контракты (WSDL). Чаще в корпоративных системах.
  4. Асинхронный обмен сообщениями:

    • Очереди сообщений (Point-to-Point): Отправитель помещает сообщение в очередь, один получатель его забирает (RabbitMQ, ActiveMQ, Amazon SQS). Гарантирует доставку.
    • Системы потоковой обработки (Pub/Sub): Отправитель публикует событие в топик, множество подписчиков получают его (Apache Kafka, Google Pub/Sub).
  5. Сетевые протоколы специализированного назначения: WebSockets (для двусторонней связи в реальном времени), GraphQL (для гибкого запроса данных с клиента).

Критические аспекты для тестирования интеграции:

  • Контракт/Схема данных: Валидация формата (JSON Schema, Protobuf).
  • Аутентификация и авторизация: API-ключи, OAuth 2.0, JWT-токены.
  • Обработка ошибок и повторы: Корректные HTTP-статусы, механизмы retry с экспоненциальной задержкой.
  • Идемпотентность: Повторный вызов API с теми же данными не должен вызывать побочных эффектов (важно для retry).
  • Версионирование API: Поддержка обратной совместимости при изменениях (например, через заголовок Accept-Version).