added examples for blob

This commit is contained in:
Almaz Sharipov committed 2025-10-03 10:44:32 +03:00
1 parent b12d5f2383
commit 1bbe31bbc2
1 file changed
+159 -83
+159 -83
View File
@@ -5,22 +5,22 @@
// GUID соединения - Строка
Функция СоздатьSQLСоединение() Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/connection";
json_body = СериализоватьВJSON(
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/connection";
ТелоJSON = СериализоватьВJSON(
Новый Структура(
"host,port,user,password,db_type,db_name,ssl",
"127.0.0.1", 5432, "postgres", "postgres", "postgres", "test", Ложь
));
)); // перепишите под себя, чтобы не хранить пароли в тексте программы
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Content-Type", "application/json;charset=UTF-8");
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
query = Новый HTTPЗапрос(path, headers);
query.УстановитьТелоИзСтроки(json_body);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоJSON);
Ответ = http.ВызватьHTTPМетод("POST", query);
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
КодРезультата = Ответ.КодСостояния;
SQLСоединение = Ответ.ПолучитьТелоКакСтроку();
Если КодРезультата = 200 Тогда
@@ -34,25 +34,26 @@
// Закрывает и удаляет соединение с SQL-сервером
// Параметры:
// SQLСоединение - Строка - GUID открытого соединения
Процедура УдалитьSQLСоединение(SQLСоединение) Экспорт
Функция УдалитьSQLСоединение(SQLСоединение) Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/connection";
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/connection";
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Connection-Id", SQLСоединение);
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", SQLСоединение);
query = Новый HTTPЗапрос(path, headers);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
Ответ = http.ВызватьHTTPМетод("DELETE", query);
Ответ = HTTPСоединение.ВызватьHTTPМетод("DELETE", HTTPЗапрос);
КодРезультата = Ответ.КодСостояния;
Результат = Ответ.ПолучитьТелоКакСтроку();
Если КодРезультата = 200 Тогда
SQLСоединение = "";
КонецЕсли;
КонецПроцедуры
Возврат КодРезультата;
КонецФункции
// Выполняет обычные SQL-запросы вида выборки таблиц
// Параметры:
@@ -62,18 +63,18 @@
// Результат запроса - Структура, содержащая массив структур - результат выборки запроса
Функция ЗапросВыборкаДанных(SQLСоединение, SQLЗапрос) Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/query";
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/HTTPЗапрос";
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Connection-Id", SQLСоединение);
headers.Вставить("Content-Type", "text/plain;charset=UTF-8");
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", SQLСоединение);
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
query = Новый HTTPЗапрос(path, headers);
query.УстановитьТелоИзСтроки(SQLЗапрос);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
Ответ = http.ВызватьHTTPМетод("POST", query);
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
КодРезультата = Ответ.КодСостояния;
Если КодРезультата = 200 Тогда
Возврат ДесериализоватьИзJSON(Ответ.ПолучитьТелоКакСтроку());
@@ -87,23 +88,23 @@
// Параметры:
// SQLСоединение - Строка - GUID открытого соединения
// SQLЗапрос - Строка - Текст SQL-запроса
Процедура ЗапросИзменениеДанных(SQLСоединение, SQLЗапрос) Экспорт
Функция ЗапросИзменениеДанных(SQLСоединение, SQLЗапрос) Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/query";
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/HTTPЗапрос";
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Connection-Id", SQLСоединение);
headers.Вставить("Content-Type", "text/plain;charset=UTF-8");
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", SQLСоединение);
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
query = Новый HTTPЗапрос(path, headers);
query.УстановитьТелоИзСтроки(SQLЗапрос);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
Ответ = http.ВызватьHTTPМетод("PUT", query);
КодРезультата = Ответ.КодСостояния;
Ответ = HTTPСоединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);
Возврат Ответ.КодСостояния;
КонецПроцедуры
КонецФункции
// Создает подготовленный оператор (Prepared statement)
// Параметры:
@@ -113,18 +114,18 @@
// GUID оператора - Строка
Функция СоздатьПодготовленныйОператор(SQLСоединение, SQLЗапрос) Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/prepared";
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/prepared";
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Connection-Id", Соединение);
headers.Вставить("Content-Type", "text/plain;charset=UTF-8");
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", Соединение);
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
query = Новый HTTPЗапрос(path, headers);
query.УстановитьТелоИзСтроки(SQLЗапрос);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
Ответ = http.ВызватьHTTPМетод("POST", query);
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
КодРезультата = Ответ.КодСостояния;
Результат = Ответ.ПолучитьТелоКакСтроку();
Если КодРезультата = 200 Тогда
@@ -139,22 +140,22 @@
// Параметры:
// SQLСоединение - Строка - GUID открытого соединения
// SQLОператор - Строка - GUID оператора
Процедура УдалитьПодготовленныйОператор(SQLСоединение, SQLОператор) Экспорт
Функция УдалитьПодготовленныйОператор(SQLСоединение, SQLОператор) Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/prepared";
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/prepared";
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Connection-Id", SQLСоединение);
headers.Вставить("Statement-Id", SQLОператор);
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", SQLСоединение);
Заголовки.Вставить("Statement-Id", SQLОператор);
query = Новый HTTPЗапрос(path, headers);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
Ответ = http.ВызватьHTTPМетод("DELETE", query);
КодРезультата = Ответ.КодСостояния;
Ответ = HTTPСоединение.ВызватьHTTPМетод("DELETE", HTTPЗапрос);
Возврат Ответ.КодСостояния;
КонецПроцедуры
КонецФункции
// Выполнить подготовленный оператор (Prepared statement) с выборкой данных
// Параметры:
@@ -165,21 +166,21 @@
// Результат запроса - Структура, содержащая массив структур - результат выборки запроса
Функция ВыполнитьПодготовленныйОператорВыборка(SQLСоединение, SQLОператор, Парам) Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/prepared/query";
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/prepared/HTTPЗапрос";
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Connection-Id", Соединение);
headers.Вставить("Statement-Id", Оператор);
headers.Вставить("Content-Type", "application/json;charset=UTF-8");
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", Соединение);
Заголовки.Вставить("Statement-Id", Оператор);
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
ПараметрыJSON = СериализоватьВJSON(Парам);
query = Новый HTTPЗапрос(path, headers);
query.УстановитьТелоИзСтроки(ПараметрыJSON);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыJSON);
Ответ = http.ВызватьHTTPМетод("POST", query);
Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
КодРезультата = Ответ.КодСостояния;
Если КодРезультата = 200 Тогда
@@ -195,26 +196,101 @@
// SQLСоединение - Строка - GUID открытого соединения
// SQLОператор - Строка - GUID оператора
// Парам - Массив - Параметры для подготовленного оператора
Процедура ВыполнитьПодготовленныйОператорИзменение(SQLСоединение, SQLОператор, Парам) Экспорт
Функция ВыполнитьПодготовленныйОператорИзменение(SQLСоединение, SQLОператор, Парам) Экспорт
http = Новый HTTPСоединение("localhost", 8080);
path = "/api/v1/prepared/query";
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/prepared/HTTPЗапрос";
headers = Новый Соответствие;
headers.Вставить("API-Version", "1.2");
headers.Вставить("Connection-Id", Соединение);
headers.Вставить("Statement-Id", Оператор);
headers.Вставить("Content-Type", "application/json;charset=UTF-8");
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", Соединение);
Заголовки.Вставить("Statement-Id", Оператор);
Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
ПараметрыJSON = СериализоватьВJSON(Парам);
query = Новый HTTPЗапрос(path, headers);
query.УстановитьТелоИзСтроки(ПараметрыJSON);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыJSON);
Ответ = http.ВызватьHTTPМетод("PUT", query);
Ответ = HTTPСоединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);
Возврат Ответ.КодСостояния;
КонецФункции
// Прочитать поле BLOB из таблицы
// Параметры:
// SQLСоединение - Строка - GUID открытого соединения
// SQLЗапрос - Строка - Текст SQL-запроса, содержащий выборку *одного*
// поля бинарного типа BYTEA, BLOB, IMAGE и т.д.
//
Функция ПрочитатьBlob(SQLСоединение, SQLЗапрос) Экспорт
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/blob";
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", HTTPСоединение);
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(SQLЗапрос);
Ответ = http.ВызватьHTTPМетод("POST", HTTPЗапрос);
КодРезультата = Ответ.КодСостояния;
Если КодРезультата = 200 Тогда
Возврат ПоместитьВоВременноеХранилище(Ответ.ПолучитьТелоКакДвоичныеДанные(), Новый УникальныйИдентификатор());
Иначе
Возврат Неопределено;
КонецЕсли;
КонецПроцедуры
КонецФункции
// Записать поле BLOB в таблицу
// Параметры:
// SQLСоединение - Строка - GUID открытого соединения
// SQLЗапрос - Строка - Текст SQL-запроса, содержащий инструкции INSERT или UPDATE
// и *один* параметр указывающий на значение бинарного типа BYTEA, BLOB,
// IMAGE и т.д.
// Адрес - Строка - Адрес временного хранилища, содержащий двоичные данные
//
Функция ЗаписатьBlob(SQLСоединение, SQLЗапрос, Адрес) Экспорт
HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
Путь = "/api/v1/blob";
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");
Заголовки = Новый Соответствие;
Заголовки.Вставить("API-Version", "1.2");
Заголовки.Вставить("Connection-Id", HTTPСоединение);
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
Поток = Новый ПотокВПамяти;
Запись = Новый ЗаписьДанных(Поток,,, Символы.ВК + Символы.ПС, "");
Запись.ЗаписатьСтроку("--" + Разделитель);
Запись.ЗаписатьСтроку("Content-Disposition: form-data; name=sql_query;");
Запись.ЗаписатьСтроку("Content-Type: text/html");
Запись.ЗаписатьСтроку("");
Запись.ЗаписатьСтроку(Запрос);
Запись.ЗаписатьСтроку("--" + Разделитель);
Запись.ЗаписатьСтроку("Content-Disposition: form-data; name=binary_data;filename=blob_data");
Запись.ЗаписатьСтроку("Content-Type: application/octet-stream");
Запись.ЗаписатьСтроку("");
Запись.Записать(ПолучитьИзВременногоХранилища(Адрес));
Запись.ЗаписатьСтроку("");
Запись.ЗаписатьСтроку("--" + Разделитель + "--");
Запись.ЗаписатьСтроку("");
Запись.Закрыть();
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Поток.ЗакрытьИПолучитьДвоичныеДанные());
Ответ = http.ВызватьHTTPМетод("PUT", HTTPЗапрос);
Возврат Ответ.КодСостояния;
КонецФункции
#КонецОбласти