Интеграция с внешними веб-сервисами часто вызывает затруднения, особенно на этапе перехода от простой авторизации к выполнению целевых запросов. Давайте разберем по шагам, как правильно настроить взаимодействие 1С с API, используя стандартные объекты HTTPСоединение и HTTPЗапрос.
Для большинства современных API процесс авторизации строится на отправке учетных данных в теле POST-запроса в формате JSON. Важно помнить, что сервер должен понимать, в каком формате мы присылаем данные, поэтому мы обязательно используем заголовок Content-type.
Рассмотрим код для выполнения авторизации:
Параметры = Новый Структура;
Параметры.Вставить("username", "vasya");
Параметры.Вставить("password", "123");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Параметры);
ПараметрыJSON = ЗаписьJSON.Закрыть();
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-type", "application/json; charset=UTF-8");
Соединение = Новый HTTPСоединение(Адрес);
Запрос = Новый HTTPЗапрос("/api/login", Заголовки);
Запрос.УстановитьТелоИзСтроки(ПараметрыJSON);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
После выполнения этого кода необходимо проанализировать Ответ. Если код состояния равен 200, значит, мы успешно авторизовались. Если же вы получаете ошибку 401, это верный признак того, что сервер не принял ваши credentials или сессия не была инициализирована.
Частая ошибка при работе с API заключается в попытке использовать один и тот же метод для разных типов запросов. Если для получения данных документация API требует метод GET, использование ОтправитьДляОбработки приведет к ошибке.
Для GET-запросов параметры передаются непосредственно в строке адреса (URL-encoded). Давайте разберем, как сформировать такой запрос правильно:
// Формируем строку с параметрами
СтрокаПараметров = "/api/data/equery?param1=value1¶m2=value2";
// Создаем GET-запрос
ЗапросДанных = Новый HTTPЗапрос(СтрокаПараметров);
// Если требуется авторизация, добавляем заголовок с токеном или куки
ЗапросДанных.Заголовки.Вставить("Authorization", "Bearer " + ПолученныйТокен);
// Выполняем получение данных
ОтветДанных = Соединение.Получить(ЗапросДанных);
Ошибка 401 Unauthorized — это сигнал того, что сервер не опознал ваш запрос как авторизованный. Чтобы этого избежать, используйте следующие стратегии:
Set-Cookie в ответ на логин, его необходимо извлечь из ответа и вставить в заголовки всех последующих запросов как Cookie.JSON-ответ с полем token. Этот токен нужно сохранять в переменную и передавать в заголовке Authorization с префиксом Bearer.HTTPСоединение на протяжении всего сеанса, 1С может пытаться автоматически передавать куки, однако надежнее контролировать заголовки вручную для каждого запроса.Всегда проверяйте код состояния ответа (Ответ.КодСостояния) перед тем, как пытаться прочитать тело ответа. Если состояние отлично от 200, изучите тело ответа: часто сервер возвращает детальное описание причины ошибки в формате JSON, что поможет быстро локализовать проблему.
Помните, что отладчик 1С — ваш лучший помощник. Посмотрите содержимое переменной Ответ, изучите заголовки и тело, чтобы убедиться, что данные уходят именно в том виде, который ожидает сервер. Анализ документации API в связке с отладкой позволяет решить большинство интеграционных задач в кратчайшие сроки.