Многие разработчики, переходящие с языков программирования общего назначения (таких как Python) на 1С, сталкиваются с тем, что работа с веб-сервисами кажется более громоздкой. В Python библиотека requests позволяет выполнить задачу в три строки, тогда как в 1С приходится явно инициализировать объекты соединений и сериализовать данные. Давайте разберем по шагам, как эффективно организовать обмен данными с API, используя стандартные механизмы платформы.
Для начала нам необходимо подготовить данные в формате JSON, которые мы будем передавать в теле запроса. Для этого в 1С используется объект ЗаписьJSON. Рассмотрим подробнее процесс формирования строки JSON из структуры 1С:
// Формируем данные, которые хотим отправить
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("number", "001");
// Настраиваем запись JSON
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
// Сериализуем структуру в JSON-строку
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
Важным моментом является выбор кодировки. Хотя в некоторых случаях может потребоваться иная кодировка, стандарт де-факто для веб-интеграций — это UTF-8. При использовании метода УстановитьТелоИзСтроки убедитесь, что вы правильно указываете параметры кодирования.
После того как данные готовы, нам нужно отправить их на сервер. Рассмотрим классический подход с использованием HTTPСоединение и HTTPЗапрос. Обратите внимание, что параметры запроса (query parameters) можно передавать прямо в адресной строке ресурса.
// Создаем соединение с сервером
// 192.168.220.224 — адрес вашего API
HTTPСоединение = Новый HTTPСоединение("192.168.220.224", 80);
// Формируем запрос
// Параметры name=lina&id=001 передаем сразу в адресе ресурса
АдресРесурса = "/api/?name=lina&id=001";
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
// Устанавливаем заголовки, важные для корректной обработки данных
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json;charset=utf-8");
// Прикрепляем сформированное тело
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
// Выполняем запрос
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
// Получаем результат
КодСостояния = Ответ.КодСостояния;
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Начиная с версии платформы 8.3.10, работа с HTTP стала значительно удобнее благодаря методу ВызватьHTTPМетод(). Он позволяет использовать одну и ту же логику для разных типов запросов (POST, PUT, DELETE, GET), меняя лишь строковый идентификатор метода. Это значительно сокращает объем кода и делает его более читаемым.
Преимущества использования ВызватьHTTPМетод:
ОтправитьДляОбработки или Получить.HTTPЗапрос.Для полноценной интеграции вам также могут потребоваться методы PUT и DELETE. Логика их реализации практически идентична POST-запросу:
Для метода PUT (обновление данных):
// Логика идентична POST, просто меняем метод
Ответ = HTTPСоединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);
Для метода DELETE (удаление):
// Запрос на удаление часто не требует тела, но требует корректных заголовков
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
Ответ = HTTPСоединение.ВызватьHTTPМетод("DELETE", HTTPЗапрос);
Чтобы избежать ошибок при интеграции, рекомендуем обратить внимание на следующие аспекты:
ЗащищенноеСоединениеOpenSSL и передайте его в конструктор HTTPСоединение.Content-Type ожидает сервер. Ошибка 400 или 415 чаще всего означает, что сервер не понял формат передаваемых данных.Ответ.ПолучитьТелоКакСтроку(). В 90% случаев сервер присылает детальное сообщение об ошибке валидации данных.Разработав однажды собственный класс-обертку или модуль для работы с API, вы сможете вызывать функции отправки запросов одной строкой, что нивелирует разницу между 1С и Python в плане удобства написания кода.