29 апреля, 2024

Запрос к API из 1С 7.7

В то время как остальные программы уже всё могут, 1С 7.7 не может нормально выполнить http запрос. И тут больше проблема не в запросе как таковом, а в подготовке данных и анализе полученного. Современные API, как правило, работают с данными в виде JSON в кодировке utf8. Ни то ни другое семерка не умеет делать без костылей. Вот для решения этих двух проблем в одном действии, родилась идея перенести эту часть на ту программу, для которой это не составляет труда. Я набросал небольшой проект на Go, исходный код доступен на GitHub и там же доступен скомпилированный под Windows бинарник.

Принцип работы простой. Нужно положить рядом с программой конфиг, в котором один параметр: base_url, это корневой адрес сервера куда будем делать запрос. При запуске нужно указать два ключа: url и method, это адрес ресурса и имя метода. Программа выполнит запрос, полученные данные пересоберет в CSV и значения перекодирует в кодировку Windows-1251, результат будет сохранен в файл output.csv. Чтобы отправить что-то, нужно перед запуском сформировать CSV в вин-кодировке и положить в файл с именем input.csv рядом с программой. При выполнении POST или PUT запроса, файл будет преобразован в JSON, utf8 и передан на сервер.

// пример выполнения POST запроса
call.exe -url=api/1c/product -method=POST

// для выполнения GET запроса параметр method можно не указывать
call.exe -url=api/1c/catalog

Вот и все. Напомню, что по стандарту CSV должен содержать первую строку с именами полей, дальше строки с элементами данных. Ну и на текущей стадии это не совсем универсальное решение, я его использую на конкретном API и, может, не учитываю каких-то нюансов. Например, тут нет авторизации, она мне сейчас не нужна, но это можно легко добавить. Если это еще кому-то пригодится и будут идеи, пишите.