Создание HTTP – сервисов, передача данных по API

HTTP-сервисы – это механизм для организации обмена данными между информационной базой 1С и внешними системами через протокол HTTPs.

Создание и настройка сервиса

В дереве метаданных: Общие HTTP-сервисы необходимо добавить новый сервис, задать ему имя и корневой URL.

Рисунок 1

Далее необходимо для каждого метода создать шаблон URL и обработчик (рисунок 2). Шаблон URL нужен для того, чтобы сопоставить URL, по которому произошло обращение к сервису, с одним из имеющихся HTTP-методов. Затем, для шаблона URL добавим метод GET, который будет вызван при сопоставлении этого шаблона с URL запроса к HTTP-сервису.

Далее создадим обработчик этого метода. Имя обработчика автоматически формируется путем соединения имени шаблона URL и имени самого метода. HTTP-сервис может содержать в себе один или несколько шаблонов, а также для каждого шаблона можно создать один или несколько методов, выполняющих обработку данных.

Рисунок 2

В модуле HTTP-сервиса будет создан шаблон функции-обработчика, который получает на вход параметр и возвращает ответ:

Функция Get(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(Ответ); 
    Ответ.Заголовки.Вставить("Content-Type","application/json");
    Возврат Ответ;
КонецФункции

В нашем случае, в 1С будет передаваться название картинки и само изображение с сохранением ее в справочнике:

Функция GetUploadAnImageGET(Запрос)
ЗаписьЖурналаРегистрации(«Обращение к HTTP сервису»,УровеньЖурналаРегистрации.Информация,Метаданные.Справочники.Объекты,," Обращение к HTTP сервису"); 
	image_name = Запрос.ПараметрыЗапроса.Получить("image_name");
	image_link = Запрос.ПараметрыЗапроса.Получить("image_link");
ЗаписьЖурналаРегистрации("Получен образ",УровеньЖурналаРегистрации.Информация,Метаданные.Справочники.Объекты,,"Получено наименование "+image_name+" и образ "+image_link); 
			
	ВремФайл = ПолучитьИмяВременногоФайла();
   	КопироватьФайл(image_link, ВремФайл);

   	ДвоичДанные = Новый ДвоичныеДанные(ВремФайл);
   	КартинкаНаФормеТипаСтрока = ПоместитьВоВременноеХранилище(ДвоичДанные);
ЗаписьЖурналаРегистрации("Образ преобразован",УровеньЖурналаРегистрации.Информация,Метаданные.Справочники.Объекты,,"Двоичные: "+ДвоичДанные+" и хранилище "+КартинкаНаФормеТипаСтрока); 
	
	ПутьКФайлу = "C:\Песочницы\"+image_name+"1.jpg";
     	КопироватьФайл (image_link, ПутьКФайлу);
	 
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Объекты.Ссылка КАК Ссылка,
		|	Объекты.Наименование КАК Наименование,
		|	Объекты.Образ КАК Образ
		|ИЗ
		|	Справочник.Объекты КАК Объекты
		|ГДЕ
		|	Объекты.Наименование ПОДОБНО &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", image_name);
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Если РезультатЗапроса.Количество()>0 тогда
		СтарыйОбраз = РезультатЗапроса[0].Ссылка.ПолучитьОбъект();
		СтарыйОбраз.образ = Новый ХранилищеЗначения(ДвоичДанные);
		СтарыйОбраз.СсылкаНаКартинку = КартинкаНаФормеТипаСтрока;
		СтарыйОбраз.Записать();
	Иначе
		НовыйОбраз = Справочники.Объекты.СоздатьЭлемент();
		НовыйОбраз.Наименование = image_name;
		НовыйОбраз.образ = Новый ХранилищеЗначения(ДвоичДанные);
		НовыйОбраз.СсылкаНаКартинку = КартинкаНаФормеТипаСтрока;
       		 НовыйОбраз.Записать();
	КонецЕсли;
	Ответ = Новый HTTPСервисОтвет(200);
	Возврат Ответ;
КонецФункции

Далее необходимо сделать публикацию на сервере (рисунок 3).

В конфигураторе: Администрирование → Публикация на веб сервере. Указать имя публикации, выбрать сервисы для публикации, настроить доступ и безопасность.

Рисунок 3

Тестирование

В качестве тестирования можно использовать инструменты: Postman, curl, браузер.

Результат тестирования – это созданная запись в справочнике с наименованием и изображением, которое мы передали из браузера (рисунок 4).

Рисунок 4