Если вы не слышали ранее об Открытом Пакете Интеграций (что вполне вероятно), то небольшая вводная часть ниже, под катом. Тем, кто уже знаком с ОПИ, данный раздел можно пропустить.
Что такое Открытый Пакет Интеграций

Открытый Пакет Интеграций (ОПИ) - это open-source набор методов для простой и быстрой интеграции с различными популярными API. Он состоит из аналогичных по функционалу 1С-расширения (CFE), OS-пакета и программы для Windows и Linux, которые предоставляют готовые функции для работы с целым набором различных онлайн-сервисов.

- ОПИ бесплатен и имеет открытый исходный код на GitHub. Вы всегда можете получить последнюю версию библиотеки на странице репозитория, а подписавшись - узнавать о выходе обновлений. Все релизы сопровождаются статьями на Инфостарт и разделами единой документации. На Инфостарт вы можете подписаться уже хоть сейчас, а про документацию я расскажу далее.

- Удобная единая документация. Она расположена на сайте openintegrations.dev и содержит в себе всю информацию, необходимую для работы: инструкции по предварительным действиям для начала интеграции, описания всех методов с параметрами и возвращаемыми значениями, примеры кода и т.д. Каждый API имеет там свой раздел.
- Простая установка. ОПИ распространяется во множестве вариантах: как XML файлы расширения, как EDT проект расширения, как файл расширения формата .cfe (версия 1С 8.3.9), как файл пакета для OneScript и еще в целом наборе пакетов и файлов для Windows и Linux. Из этого набора вы всегда сможете выбрать тот способ установки, который лучше подойдет для вашей конкретной задачи
На момент последнего обновления данной статьи, доступны следующие API:
























Наиболее актуальную информацию можно посмотреть в репозитории или на вводной странице документации.

MySQL - мощная, надежная и широко используемая система управления базами данных компании Oracle, наиболее часто встречаемая в веб-разработке
Она часто является фундаментом как для отдельных веб-приложений (например, в стеке LAMP), так и в решениях на основе популярных CMS (вроде Wordpress, Joomla или Drupal) и платформ электронной коммерции (WooCommerce, OpenCart и др.)
Обмен данными с сайтом компании или интернет магазином - задача для 1С программистов достаточно тривиальная. Поэтому, для работы с теми из них, которые используют для хранения данных базы MySQL, в ОПИ теперь есть следующие методы:
- Основные методы
- Открытие соединения
- Закрытие соединения
- Выполнение SQL-запроса
- Формирование строки подключения из основных данных
- Получение структуры настроек TLS
- Методы ORM
- Создание базы данных
- Удаление базы данных
- Получение информации о таблице
- Создание таблицы
- Очистка таблицы
- Удаление таблицы
- Добавление записей
- Получение записей
- Обновление данных записей
- Удаление записей
Этим методы схожи с теми, что были реализованы для двух предыдущих СУБД в наборе ОПИ: SQLite и PostgreSQL. Они все в качестве основы используют общий модуль с методами ORM, так что если вы уже знакомы с ними, тот тут для вас не будет ничего нового
Адрес = "127.0.0.1";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "";
СтрокаПодключения = OPI_MySQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
// При использовании строки подключения инициализируется новое соединение,
// которое будет закрыто после выполнения функции.
// В случае выполнения нескольких операций желательно использовать одно соединение,
// заранее созданное функцией ОткрытьСоединение()
Результат = OPI_MySQL.СоздатьБазуДанных(База, СтрокаПодключения);
Адрес = "127.0.0.1";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "testbase1";
СтрокаПодключения = OPI_MySQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
МассивЗаписей = Новый Массив;
Картинка = "https://api.athenaeum.digital/test_data/picture.jpg";
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("char_field" , Новый Структура("TEXT" , "AAAAA"));
СтруктураЗаписи.Вставить("varchar_field" , Новый Структура("TEXT" , "Some varchar"));
СтруктураЗаписи.Вставить("tinytext_field" , Новый Структура("TEXT" , "Some tiny text"));
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT" , "Some text"));
СтруктураЗаписи.Вставить("mediumtext_field", Новый Структура("TEXT" , "Some medium text"));
СтруктураЗаписи.Вставить("longtext_field" , Новый Структура("TEXT" , "Some looooooong text"));
СтруктураЗаписи.Вставить("tinyint_field" , Новый Структура("INT" , 127));
СтруктураЗаписи.Вставить("smallint_field" , Новый Структура("INT" , -32767));
СтруктураЗаписи.Вставить("mediumint_field" , Новый Структура("INT" , 8388607));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT" , -2147483647));
СтруктураЗаписи.Вставить("uint_field" , Новый Структура("UINT" , 4294967295));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("INT" , 9223372036854775807));
СтруктураЗаписи.Вставить("float_field" , Новый Структура("FLOAT" , 100.50));
СтруктураЗаписи.Вставить("double_field" , Новый Структура("FLOAT" , 100.512123));
СтруктураЗаписи.Вставить("date_field" , Новый Структура("DATE" , ТекущаяДата));
СтруктураЗаписи.Вставить("time_field" , Новый Структура("TIME" , ТекущаяДата));
СтруктураЗаписи.Вставить("datetime_field" , Новый Структура("DATE" , ТекущаяДата));
СтруктураЗаписи.Вставить("timestamp_field" , Новый Структура("DATE" , ТекущаяДата));
СтруктураЗаписи.Вставить("mediumblob_field", Новый Структура("BYTES" , Картинка));
СтруктураЗаписи.Вставить("set_field" , Новый Структура("TEXT" , "one"));
МассивЗаписей.Добавить(СтруктураЗаписи);
// При использовании строки подключения инициализируется новое соединение,
// которое будет закрыто после выполнения функции.
// В случае выполнения нескольких операций желательно использовать одно соединение,
// заранее созданное функцией ОткрытьСоединение()
Результат = OPI_MySQL.ДобавитьЗаписи(Таблица, МассивЗаписей, Истина, СтрокаПодключения);
Адрес = "127.0.0.1";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "testbase1";
СтрокаПодключения = OPI_MySQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
// Все записи без отборов
Таблица = "testtable";
// При использовании строки подключения инициализируется новое соединение,
// которое будет закрыто после выполнения функции.
// В случае выполнения нескольких операций желательно использовать одно соединение,
// заранее созданное функцией ОткрытьСоединение()
Результат = OPI_MySQL.ПолучитьЗаписи(Таблица, , , , , СтрокаПодключения);
// Отборы, выбранные поля, количество и сортировка
СтрокаПодключения = OPI_MySQL.СформироватьСтрокуПодключения(Адрес, "test_data", Логин, Пароль);
Таблица = "test_data";
Поля = Новый Массив;
Поля.Добавить("first_name");
Поля.Добавить("last_name");
Поля.Добавить("email");
Фильтры = Новый Массив;
СтруктураФильтра1 = Новый Структура;
СтруктураФильтра1.Вставить("field", "gender");
СтруктураФильтра1.Вставить("type" , "=");
СтруктураФильтра1.Вставить("value", "Male");
СтруктураФильтра1.Вставить("union", "AND");
СтруктураФильтра1.Вставить("raw" , Ложь);
СтруктураФильтра2 = Новый Структура;
СтруктураФильтра2.Вставить("field", "id");
СтруктураФильтра2.Вставить("type" , "BETWEEN");
СтруктураФильтра2.Вставить("value", "20 AND 50");
СтруктураФильтра2.Вставить("raw" , Истина);
Фильтры.Добавить(СтруктураФильтра1);
Фильтры.Добавить(СтруктураФильтра2);
Сортировка = Новый Структура("ip_address", "DESC");
Количество = 5;
Результат = OPI_MySQL.ПолучитьЗаписи(Таблица, Поля, Фильтры, Сортировка, Количество, СтрокаПодключения);
Большой пример с произвольными SQL запросами
Картинка = "https://api.athenaeum.digital/test_data/picture.jpg";
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
Адрес = "127.0.0.1";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "test_data";
СтрокаПодключения = OPI_MySQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Соединение = OPI_MySQL.ОткрытьСоединение(СтрокаПодключения);
// CREATE
ТекстЗапроса = "
|CREATE TABLE test_table (
|id INT AUTO_INCREMENT PRIMARY KEY,
|name VARCHAR(255),
|age INT,
|salary DOUBLE,
|amount FLOAT,
|type TINYINT UNSIGNED,
|date DATE,
|time TIME,
|data MEDIUMBLOB
|);";
Результат = OPI_MySQL.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);
// INSERT с параметрами
ТекстЗапроса = "
|INSERT INTO test_table (name, age, salary, amount, type, date, time, data)
|VALUES (?, ?, ?, ?, ?, ?, ?, ?);";
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("TEXT" , "Vitaly"));
МассивПараметров.Добавить(Новый Структура("INT" , 25));
МассивПараметров.Добавить(Новый Структура("DOUBLE", 1000.12));
МассивПараметров.Добавить(Новый Структура("FLOAT" , 1000.12));
МассивПараметров.Добавить(Новый Структура("UINT" , 1));
МассивПараметров.Добавить(Новый Структура("DATE" , OPI_Инструменты.ПолучитьТекущуюДату()));
МассивПараметров.Добавить(Новый Структура("TIME" , OPI_Инструменты.ПолучитьТекущуюДату()));
МассивПараметров.Добавить(Новый Структура("BYTES" , Картинка));
Результат = OPI_MySQL.ВыполнитьЗапросSQL(ТекстЗапроса, МассивПараметров, , Соединение);
// SELECT (Результат этого запроса приведен в следующем блоке)
ТекстЗапроса = "SELECT name, age, salary, amount, type, date, time, data FROM test_table;";
Результат = OPI_MySQL.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);
// SQL запрос из файла
ФайлSQL = "https://api.athenaeum.digital/test_data/TEST_DATA2.sql"; // Двоичные данные, URL или путь к файлу
Результат = OPI_MySQL.ВыполнитьЗапросSQL(ФайлSQL, , , Соединение);
Закрытие = OPI_MySQL.ЗакрытьСоединение(Соединение);
Больше примеров, а также информацию о каждом доступном методе, его параметрах и возвращаемом значении, как и всегда, можно найти в документации
TLS
Все методы для работы с MySQL (как и для работы с PostgreSQL, начиная с прошлого обновления) поддерживают использования защищенного соединения через TLS. Для его включения необходимо передать структуру настроек, получаемую методом ПолучитьНастройкиTls в последний параметр подходящего метода. В структуре настроек же можно дополнительно настроить отключение проверки некорректных или самоподписанных сертификатов, а также указать путь к файлу конкретного CA, если его нет в системном хранилище
// С TLS
Адрес = "api.athenaeum.digital";
Порт = "3307";
СтрокаПодключения = OPI_MySQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль, Порт);
НастройкиTLS = OPI_MySQL.ПолучитьНастройкиTls(Ложь);
Результат = OPI_MySQL.ОткрытьСоединение(СтрокаПодключения, НастройкиTLS);
OPI_MySQL.ЗакрытьСоединение(Результат);
Другие изменения
И еще немного о других изменениях в данном обновлении:
Поддержка TLS в библиотеке TCP
Библиотека TCP, наряду с PostgreSQL и MySQL, теперь также поддерживает защищенное соединение из коробки. Настраивается оно по тому же принципу, что был описан выше для MySQL
Новый раздел в документации: "О внешних компонентах"
Все больше библиотек ОПИ в основе своей используют внешние компоненты. Новый, посвященный им, раздел документации позволяет узнать больше о внутреннем устройстве и работе, а также о требованиях и зависимостях (для Linux), необходимых для функционирования всех внешних компонент ОПИ

Также, все библиотеки, использующие внешние компоненты, теперь помечены в документации специальными панельками

Код внешних компонент, также как и 1Сный, открыт и находится в репозитории. При желании вы можете пересобрать внешние компоненты сами - этому посвящена одна из частей нового раздела
Ну, а на этом все! Все ссылки на ресурсы Открытого пакета интеграций будут ниже
Спасибо за внимание!
Если вам нравится ОПИ, то не забывайте поддерживать его на GitHub и Инфостарт!

Репозиторий ОПИ: github.com/Bayselonarrend/OpenIntegrations
Последний релиз: github.com/Bayselonarrend/OpenIntegrations/releases/latest
Другие статьи про Открытый пакет интеграций на Инфостарт:

Мой GitHub: https://gitub.com/Bayselonarrend
OpenYellow: https://openyellow.org
Лицензия MIT: https://mit-license.org