Хабрахабр

[Из песочницы] Как минимизировать ошибки при интеграции с внешними сервисами: опыт онлайн-брокера

За полтора года мы интегрировались по API с двадцатью внешними сервисами. Первые пять интеграций прошли через боль и слезы — мы допустили все возможные ошибки. По несколько раз переписывали код, расставались с партнерами перед самым релизом, потому что не смогли договориться о доработках. Теряли время и деньги.

В результате последнюю интеграцию мы сделали в четыре раза быстрее, чем первую. Но при каждой новой интеграции мы придумывали решения для повторяющихся проблем. Мы развиваем онлайн-брокера. Что теперь мы делаем иначе — читайте в статье.
Чтобы вы лучше понимали специфику наших интеграций, вкратце расскажем, чем мы занимаемся. Пользователь выбирает подходящее предложение и получает деньги. Принцип работы: на сайт приходит пользователь, заполняет анкету, мы передаем ее микрофинансовым организациям (МФО) и получаем от них одобрение или отказ по займу. Чтобы всё это работало онлайн, мы интегрируемся с МФО по API.

Оценка готовности партнера к интеграции с помощью чек-листа и спецификации

Разберем два сценария: когда у потенциального партнера уже есть API для приема заявок, и когда нет. Оба сценария предполагают, что партнер хочет с нами интегрироваться и готов потратить на это время.

У партнера нет API — отправляем спецификацию

Раньше мы объясняли партнеру устно или в переписке, что нам нужно для интеграции, а партнер на основе этих объяснений делал API для приема заявок с Finspin. Мы не согласовывали требования к моделям, объектам, полям анкеты и правилам их валидации. Бегло описывали назначения методов и возможные ответы. Результат оказывался бесконечно далеким от ожидаемого, потому что наше понимание API сильно расходилось с партнерским. Приходилось все переделывать.

Мы написали свою спецификацию — YAML-файл, который можно открыть в Swagger. Сейчас. Зафиксировали статусы состояния заявки, которые планируем получать, например: «принято в обработку», «идет скоринг», «отказано в займе», «одобрение» и т. В спецификации мы описали самое подходящее API для интеграции Finspin с МФО: поля анкеты и правила их валидации, форматы и типы запросов c ответами, названия методов, возможные ошибки и статусы. д.

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

Также с помощью спецификации мы быстро отсеиваем не готовых к интеграции партнеров. Мы потратили на создание спецификации два дня, зато сейчас экономим десятки часов на согласованиях и доработках API. На ранних этапах становится понятно, что наши процессы обработки заявок в онлайне сильно отличаются: интегрироваться невыгодно.

У партнера есть API — прогоняем по чек-листу

Раньше мы получали спецификацию партнера и задавали по ней вопросы на ходу. Часто забывали уточнить что-нибудь важное, а потом это важное всплывало на финальных этапах разработки и тестирования, когда исправлять и переписывать становилось особенно затратно. Как-то под конец интеграции с одним партнером выяснилось, что он будет передавать статусы займов по API с задержкой в несколько дней. Для нас это недопустимо. От партнерства пришлось отказаться.

Мы написали чек-лист для оценки API и процессов, которые оно обслуживает. Сейчас. Сначала наш менеджер ищет ответы в спецификации. В чек-листе собрали вопросы, на которые нужно обязательно получить ответы. Если не находит, адресует вопросы партнеру.

Чек-лист помогает найти узкие места до начала разработки, а не после — когда приходится править код, а клиенты страдают из-за плохого обслуживания.

Чем детальнее чек-лист, тем ниже риск пропустить ошибки в разработку. Мы постоянно пополняем чек-лист, когда сталкиваемся с новыми ситуациями.


Фрагмент чек-листа для оценки API

Словарик терминов

Раньше нам казалось, что в сфере онлайн-кредитования все понимают профтермины одинаково, разночтений быть не может. Практика показала, что мы ошибались.

Для нас первичный клиент — это клиент, анкета которого впервые попала в базу МФО через Finspin, а повторный клиент уже был в базе. Например, с одним МФО мы по-разному трактовали первичных и повторных клиентов. Такая терминологическая путаница могла привести к нестыковкам при финансовых сверках. Партнер считал повторными клиентов по количеству выданных займов: повторные получили два займа и пришли за третьим.

Как правило, достаточно уточнить пять-шесть основных терминов, чтобы синхронизировать представления об интеграции и оценить перспективы совместной работы. Сейчас мы используем небольшой словарик терминов, по которому сверяемся с партнерами.

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


Уточняем термин “Одобрение”

Сначала бизнес, потом разработка

Раньше были случаи, когда мы начинали работу с потенциальным партнером со спецификации. Наш менеджер получал спецификацию, внимательно ее штудировал, уточнял у партнера детали для интеграции, обсуждали спорные моменты с разработчиками. А потом от руководства прилетало сообщение: «Отбой, интеграция отменяется, не договорились по условиям». Сотрудники впустую потратили время.


Когда передумали, а работа сделана

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

Готовность к интеграции: урлы, реквизиты, окружение

Раньше первое обращение к API партнера происходило во время тестирования нашего приложения, с dev серверов. Часто первые запросы получали ошибки на этапе установки соединения: can not connect to server или просто таймаут. Самые популярные причины:

  • неправильные названия методов (опечатались или перепутали),
  • неверный домен,
  • ошибочные реквизиты подключения,
  • не добавили в white-лист IP наших серверов.

На исправление таких мелких ошибок уходили часы, потому что они шли друг за другом: пока не исправишь одну, не увидишь следующую.

В чек-листе перечислены пункты, которые нужно прояснить, например: Сейчас, перед тем как взять задачу в план разработки, мы уточняем все особенности обращения к API по небольшому чек-листу.

  • ограничения по нагрузке на сервис,
  • количество запросов в единицу времени,
  • реквизиты подключения,
  • white-list по ip-адресам,
  • валидация SSL-сертификата,
  • требования к шифрованию трафика,
  • наличие особых заголовков в запросах,
  • наличие тестового сервера с API или возможности отправлять тестовые запросы на боевой сервер

Если есть тестовое API, мы обязательно узнаем, в чем разница при обращении к боевому серверу и тестовому. Мы учитываем различия при построении запросов от нашего приложения к партнерам в dev и prod окружении. Такие меры помогают нам понять, готова ли системы к нашим запросам или нужны донастройки.

Отправка запросов в API вручную

Раньше мы сразу писали код согласно спецификации партнера, составляли ТЗ, ревьювили, тестировали. А на этапе интеграционных тестов выяснялось, что не все написанное в спецификации соответствует действительности — начиная от формата запросов, заканчивая процессом прохождения заявки.

Выясняем причины у разработчиков партнера. Например, согласно спеке, при обращении на некий метод мы ожидаем в ответе строку в определенном формате, вешаем обработку на валидность полученного ответа, выходим в тесты, и вдруг получаем в ответе массив. Снова круг доработок, ревью и тестов. Они ссылаются на устаревшую документацию.

Как правило, тестировщик загружает спецификацию в Postman и имитирует полный бизнес-процесс отправки заявки на займ, проверяет самые популярные кейсы с разными наборами данных для запроса. Сейчас, как только мы получаем документацию и реквизиты подключения, мы прогоняем процесс через API-клиент. То есть вручную делает то, что потом будет делать приложение.

Мы описываем ошибки и передаем партнеру. На этапе ручного прогона вскрывается 80% неточностей в документации. В результате к моменту старта работы над кодом разработчики получают рабочую документацию. Партнер либо устраняет неточности у себя, либо дорабатывает спецификацию.

Самые популярные расхождения:

  • неверный формат запросов, обещают принимать json, оказалась нужна form-data;
  • ошибки в названиях полей, которые надо передать в запросе;
  • ошибки в форматах полей;
  • не указаны или указаны ошибочно правила валидации полей;
  • могут быть вообще забыты некоторые поля;
  • отсутствуют или отличаются от фактических описания формата ответа метода;
  • ошибочные отметки об обязательности полей — “звездочки” могут стоять там, где поле по факту не обязательное, и наоборот;
  • часто не задокументированы все состояния и статусы, в которых может находиться объект;
  • расхождения между ожидаемыми и получаемыми состояниями объектов. Например, в какой-то момент ждем, что заявка должна находиться в состоянии X — а по API по факту получаем Y.

Рецепт счастья: как избежать ошибок при интеграции по API

Напишите спецификацию по интеграции с вашим сервисом. Мы потратили на разработку спецификации в YAML два дня, зато сейчас экономим десятки часов на доработках и согласованиях.

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

Наш опыт показал, что отличия могут быть даже в очевидных терминах. Заведите словарик терминов, чтобы избежать разночтений с партнером.

Мысль очевидная, но нам помогает избежать напрасной работы. Не берите задачу в разработку, пока не получите от руководства принципиального одобрения интеграции с партнером.

д. Заведите чек-лист для уточнения особенностей обращения к API партнера: реквизиты подключения, white-list, валидация SSL-сертификата, требования к шифрованию трафика и т. Сверьтесь по чек-листу как можно раньше, чтобы избежать пробуксовок на финальных этапах.

Сперва вручную прогоните процесс через API-клиент, например через Postman. Получили спецификацию — не спешите сразу писать код. А они будут. Так вы на раннем этапе и небольшими ресурсами найдете ошибки в спецификации.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть