Как правильно интегрироваться с REST API в 1С: авторизация и получение данных

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция с внешними веб-сервисами часто вызывает затруднения, особенно на этапе перехода от простой авторизации к выполнению целевых запросов. Давайте разберем по шагам, как правильно настроить взаимодействие 1С с API, используя стандартные объекты HTTPСоединение и HTTPЗапрос.

Этап 1: Авторизация в системе

Для большинства современных 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 или сессия не была инициализирована.

Этап 2: Выполнение запросов к данным (GET-запросы)

Частая ошибка при работе с API заключается в попытке использовать один и тот же метод для разных типов запросов. Если для получения данных документация API требует метод GET, использование ОтправитьДляОбработки приведет к ошибке.

Для GET-запросов параметры передаются непосредственно в строке адреса (URL-encoded). Давайте разберем, как сформировать такой запрос правильно:


// Формируем строку с параметрами
СтрокаПараметров = "/api/data/equery?param1=value1¶m2=value2";

// Создаем GET-запрос
ЗапросДанных = Новый HTTPЗапрос(СтрокаПараметров);

// Если требуется авторизация, добавляем заголовок с токеном или куки
ЗапросДанных.Заголовки.Вставить("Authorization", "Bearer " + ПолученныйТокен);

// Выполняем получение данных
ОтветДанных = Соединение.Получить(ЗапросДанных);

Этап 3: Управление сессией и устранение ошибки 401

Ошибка 401 Unauthorized — это сигнал того, что сервер не опознал ваш запрос как авторизованный. Чтобы этого избежать, используйте следующие стратегии:

  1. Работа с Cookie: Если сервер присылает заголовок Set-Cookie в ответ на логин, его необходимо извлечь из ответа и вставить в заголовки всех последующих запросов как Cookie.
  2. Использование Bearer Token: Многие API после логина возвращают JSON-ответ с полем token. Этот токен нужно сохранять в переменную и передавать в заголовке Authorization с префиксом Bearer.
  3. Единое соединение: Если вы используете объект HTTPСоединение на протяжении всего сеанса, 1С может пытаться автоматически передавать куки, однако надежнее контролировать заголовки вручную для каждого запроса.

Всегда проверяйте код состояния ответа (Ответ.КодСостояния) перед тем, как пытаться прочитать тело ответа. Если состояние отлично от 200, изучите тело ответа: часто сервер возвращает детальное описание причины ошибки в формате JSON, что поможет быстро локализовать проблему.

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

← На главную