Перейти к содержимому

ГайдыИнтеграции и автоматизация6 мин чтения

Бриф на API-интеграцию: что определить до начала разработки

Чек-лист для брифа на API-интеграцию: что согласовать до разработки. Источник достоверных данных, поля, направление и частота передачи, критерии приёмки.

Опубликовано
Проверено
Входные данные разной формы встречаются с аккуратно подогнанным интерфейсом интеграции.

Daniil MaximkinРазработка продуктов и интеграций

Короткий ответ

В брифе на API-интеграцию нужно назвать источник истины для каждого поля, направление и частоту передачи данных и признак, по которому повторную запись узнают как ту же самую (ключ идемпотентности). Также укажите, кто получит сообщение о сбое. Запишите критерии приёмки так, чтобы третья сторона могла проверить их без уточнений.

Даниил

Главное

  • В брифе один источник истины на каждое поле, а не на каждую систему: источником значения поля может быть CRM, даже если страница в основном читает данные из Shopify.
  • Направление и периодичность записываются по каждому полю, потому что двусторонняя синхронизация на самом деле состоит из нескольких односторонних потоков, которые просто идут по одному каналу.
  • Ключ идемпотентности не даёт создать вторую запись при повторной доставке события. Рассчитывать на единственную попытку отправителя нельзя.
  • Критерии приёмки может проверить человек, которого не было на встрече: это число, состояние или результат запроса, а не «должно работать правильно».
  • Объём интеграции определяется системами и задачей. Диагностика трекинга это отдельный вопрос и никогда не обязательное условие.
В этом гайде

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

Бриф на API-интеграцию (на странице услуги я называю его контрактом данных) это короткий документ, который не даёт такому случиться. Его пишут до начала разработки, и он отвечает на один простой вопрос: что именно мы договорились строить?

Если способ реализации ещё не выбран, перед брифом я сравниваю покупку, интеграцию и разработку внутреннего инструмента.

Что включить в бриф на API-интеграцию?

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

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

Цель процесса и задействованные системы

Бриф нужен, чтобы ответить на более узкий вопрос, чем «соединить систему A с системой B». Двум и более системам редко нужно всё, что есть у других. Обычно одной системе нужны несколько полей из другой: по триггеру и чаще всего в одну сторону.

Поэтому первый раздел брифа просто называет системы и задачу обычными словами: какие две (или больше) системы участвуют, что запускает обмен и какой результат считать завершённым обменом. Клиент регистрируется, срабатывает вебхук, сотруднику поддержки нужно увидеть статус доставки, для получения которого нужно пройти ещё две системы. Или любой другой настоящий триггер. Раздел намеренно короткий. Его задача: не дать запросу незаметно вырасти в общий проект «соединить всё со всем». Именно оттуда берутся и стоимость, и дублирование.

Для гипотетического случая «CRM и система выставления счетов», который я использую ниже, раздел заполняется так: Системы: CRM и система выставления счетов. Триггер: выставлен счёт или изменился платёжный адрес. Готово: другая система один раз получила новое значение.

Источник истины и поля

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

Гипотетический пример: допустим, и в CRM, и в системе выставления счетов хранится платёжный адрес клиента. Если менеджер по продажам исправляет адрес в CRM после звонка, то полем владеет CRM, хотя адрес нужен системе выставления счетов, чтобы напечатать счёт. Строка в брифе «Платёжным адресом владеет CRM, система выставления счетов его получает» сразу устраняет спор, который иначе всплыл бы при первом же расхождении.

У каждого поля есть также направление (какая система пишет, какая читает) и периодичность (в реальном времени по событию, опросом по расписанию или пакетом за ночь). Двусторонняя синхронизация почти всегда состоит из нескольких односторонних потоков, идущих по одному каналу. Если назвать их по отдельности, то добросовестная просьба «синхронизировать всё» не превратится в две системы, которые перезаписывают друг друга.

Вот заполненный пример для случая «CRM и система выставления счетов»:

ПолеВладелец (источник истины)НаправлениеПериодичностьКлюч идемпотентности
Платёжный адрес клиентаCRMCRM → система выставления счетовПри изменении (вебхук)ID клиента + версия адреса
Сумма счёта и позицииСистема выставления счетовСистема выставления счетов → CRMПри выставлении (вебхук)ID счёта
Статус оплатыСистема выставления счетовСистема выставления счетов → CRMКаждые 30 минут (опрос)ID счёта + время статуса

Ключ идемпотентности чаще всего пропускают в черновиках, а он предотвращает самый частый сбой: одно и то же событие приходит дважды и обрабатывается дважды. Он не обязан быть сложным, часто хватает ID счёта. Но его нужно записать до начала разработки, а не выяснять после того, как в чьём-то почтовом ящике появится дубль счёта.

Авторизация, ошибки и ответственность

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

Авторизация: кто владеет учётными данными с каждой стороны, где они хранятся и кто может их отозвать, если интеграцию нужно срочно отключить. Ошибки: три отдельных вопроса. Что считается сбоем, который можно повторить, а что постоянным. Куда попадает запуск, когда повторные попытки закончились (очередь dead-letter, которую проверяет ответственный человек, а не непрочитанная строка в журнале). И кого уведомляют, когда это случилось. «Письмо разработчику» вполне годный ответ, если он записан. Обычно беда в том, что никто ничего не решил, а не в том, что выбрали не того человека.

Для случая «CRM и система выставления счетов» заполнено так: Учётные данные: по одному API-ключу с каждой стороны, хранит руководитель операций в корпоративном менеджере паролей, отозвать может любая сторона. Можно повторить: тайм-ауты и ответы 5xx, повторяются до согласованного предела. Постоянная ошибка: 4xx для неизвестного ID клиента. Путь dead-letter: таблица неудавшихся запусков в собственной базе интеграции. Кого уведомляют: руководителя операций, письмом, при каждом запуске, попавшем в dead-letter.

Конкретный пример есть в публичной документации. В документации Shopify по вебхукам прямо сказано, что доставка «не всегда гарантирована», и рекомендованы две вещи, которые должен сделать получатель. Первая: игнорировать повторные доставки, проверяя заголовок X-Shopify-Webhook-Id в каждом событии. Вторая: запускать периодическую сверку, которая забирает данные через API Shopify, чтобы принимающая система не зависела только от вебхуков. Оба требования существенны: именно ради них и существуют ключ идемпотентности и путь dead-letter, для этого API и для большинства других, которые отправляют вебхуки.

Критерии приёмки

Последнее, что фиксирует бриф: какой результат считать готовым. Условия должна уметь проверить третья сторона без уточнений. Короткий пример, снова для случая «CRM и система выставления счетов»:

  • Каждый счёт, выставленный в системе выставления счетов, появляется у соответствующего клиента в CRM в течение согласованного интервала.
  • Вебхук, доставленный дважды для одного и того же ID счёта, даёт ровно одну запись, а не две.
  • Изменение платёжного адреса в CRM отражается в следующем счёте, который система выставления счетов выставит этому клиенту.
  • Неудавшаяся доставка, исчерпавшая повторные попытки, появляется в журнале dead-letter с ID счёта и вызывает оповещение назначенному человеку. Одной записи в журнале недостаточно.
  • Откат интеграции (отключение вебхука, возврат к ручному процессу) занимает один описанный шаг и не требует правок кода.

Каждый пункт называет факт, который можно пойти и проверить (число, запись, строку журнала), а не ощущение, что пайплайн «работает правильно».

Выполненную матрицу проверок на дубликаты, неверный порядок доставки, тайм-ауты и восстановление смотрите в приёмочных тестах повторных попыток интеграции.

Что бриф не решает

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

Он не выбирает, какой из нескольких подходов к интеграции использовать (вебхук, опрос или выгрузку по расписанию) сверх того, что уже следует из строки периодичности в таблице. Этот выбор обычно зависит от ограничений, которые в бриф не попадают, например от лимитов запросов или существующего планировщика задач. И о вашем трекинге и аналитике в нём ничего нет: синхронизация CRM со счетами и событие покупки в GA4 это несвязанные вопросы, и этот документ второго не касается.

Заполненный пример и пустой шаблон

Таблица и список приёмки выше это один заполненный пример для двух гипотетических систем, CRM и системы выставления счетов. Пример не содержит данных клиентского внедрения. Единственное реальное поведение платформы, упомянутое в этом гайде, это поведение Shopify, и только так, как его описывает публичная документация.

В пустом шаблоне (Markdown, скачать) те же разделы и та же таблица, но строки пустые. Заполнить его для своих систем можно до того, как с кем-то обсуждать разработку. Если хотите составить его вместе, это относится к API-интеграциям и автоматизации, а все услуги перечислены в списке услуг. Коротко о том, как я подхожу к такой работе, написано на странице «Обо мне».

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

Вопросы

Вопросы, на которые отвечает этот гайд

Нужен ли аудит трекинга перед интеграцией?

Нет. Аудит трекинга (Tracking Health Check) это диагностика только на чтение: сходятся ли GA4, Meta, Google Ads и Shopify с вашими заказами. Он отвечает на другой вопрос, чем бриф на интеграцию, и не обязателен перед оценкой или разработкой интеграции. Если задача окажется проблемой измерения, я скажу об этом прямо, а не буду предполагать.

Кто должен писать бриф: мы или разработчик?

Черновик может написать любой из вас, но до начала разработки бриф должны согласовать обе стороны. Тот, кто лучше знает системы, пишет список полей и владельцев. Разработчик добавляет детали по обработке ошибок и идемпотентности, которые в черновике обычно пропущены.

Что делать, если мы пока не знаем поля?

В начале это нормально. Перечислите то, что знаете: две системы, триггер, примерный вид данных. И считайте бриф итогом короткого разговора об объёме работ, а не документом, который нужно принести уже готовым.

Входят ли в бриф цена или сроки?

Нет. Это технический документ: поля, владение, направление, периодичность, ошибки и приёмка. Цену и сроки согласуют отдельно, когда по брифу станет понятен объём работ.

Daniil Maximkin

Здравствуйте, я Даниил.

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

Попробовали и всё равно не выходит?

Опишите задачу

Отвечу в течение одного рабочего дня. Первый ответ бесплатный. Или напишите напрямую: next@taskfordaniel.com

Обсудить задачу

Расскажите, что нужно разработать, исправить или подключить.

Описать задачу next@taskfordaniel.com