Опишите договорённость между системами
До написания обработки определите адрес операции, метод, формат тела и смысл ответа. Уточните обязательные поля и способ сопоставить внешний объект с записью в 1С. Например, внешний номер заказа должен иметь согласованное значение, а не меняться случайно при каждой попытке передачи. Платформа позволяет обращаться к внешним HTTP-сервисам и создавать собственные обработчики. JSON может использоваться как формат данных, но сам формат не устанавливает бизнес-правила. Обе стороны должны одинаково понимать значения полей, допустимые состояния и критерий завершения операции.
Разделите отправку, обработку и получение ответа
Представьте три события: клиент отправил запрос, сервер создал запись, клиент получил подтверждение. Между вторым и третьим событием может произойти сбой связи. Тогда повторная отправка без дополнительного контроля способна создать ещё одну запись, хотя первая уже существует. Поэтому сообщение о тайм-ауте описывает наблюдение клиента, а не доказанный результат на сервере. В журнале полезно отдельно сохранять идентификатор операции, время и известное состояние. Не подменяйте неопределённый исход утверждением операция точно не выполнена.
Продумайте смысл повторного обращения
Идемпотентность означает, что повтор одинаковой операции не добавляет нового эффекта к уже полученному. Однако не любой запрос обладает этим свойством автоматически. Для операции создания защиту от дубликатов нужно согласовать с принимающей системой и проверить её фактическую реализацию. Один возможный принцип состоит в стабильном идентификаторе конкретной операции и возможности узнать её состояние. Важно определить, что произойдёт при повторе с тем же идентификатором и изменёнными данными. Просто добавить произвольное поле или заголовок недостаточно, если сервер не обрабатывает его по согласованным правилам.
Проверяйте сбои в разрешённой тестовой среде
Подготовьте сценарии успешного обмена, неверного ввода и потери подтверждения. Используйте тестовые записи, не содержащие реальных персональных данных и секретов. Журнал должен помогать сопоставить события, но не раскрывать пароли, токены и полные чувствительные сообщения. Для защищённого соединения используйте HTTPS и корректную проверку сертификата, а не отключение проверки ради устранения ошибки. Возможности и настройки сверяйте с конкретной версией платформы. При неопределённом исходе сначала установите состояние согласованным способом, затем принимайте решение о повторе.
Попробуйте на практике
Спроектируйте на бумаге обмен, который создаёт один учебный заказ и допускает потерю подтверждения.
- Опишите поля запроса, ожидаемый ответ и стабильный идентификатор одной операции.
- Нарисуйте последовательность отправки, создания записи и получения ответа, отметив возможный обрыв связи.
- Определите способ проверки состояния и правило обработки повторного запроса, включая случай изменённых данных.
- Составьте три тестовых сценария и список безопасных сведений для журнала без выполнения операций в рабочей базе.
Как проверить результат. Повтор не основан только на отсутствии ответа. Есть согласованная проверка состояния, понятная защита от дубликатов и разделение тестовых и рабочих данных.
Частые вопросы
JSON сам защищает от повторного создания записи?
Нет. Это формат представления данных. Защита от дубликатов зависит от правил обработки и их реализации на стороне системы.
После тайм-аута можно просто отправить тот же запрос ещё раз?
Только если правила операции предусматривают безопасный повтор. Иначе сначала нужно выяснить, была ли первая попытка выполнена.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.