https://rutube.ru/video/a95bde8699b25aec908f9c143b70e74f/?r=wd
В прошлом посте мы получили данные от сервиса в формате JSON и преобразовали их в данные 1С.
2. Преобразуем JSON в структуру 1С
Но что делать если нам нужен отдельный объект, или ограниченное количество товаров, или надо добавить сортировку. У каждого API эти параметры свои, но в документации вы скорее всего увидите следующее:
https://fakestoreapi.com/products/1 - получаем товар с ID=1
https://fakestoreapi.com/products?limit=5 - выбираем 5 товаров
https://fakestoreapi.com/products?sort=desc - сортируем
На 1С это реализуется так, у объекта HTTPЗапрос надо сформировать и заполнить АдресРесурса.
В прошлых примерах мы просто передавали "products", сейчас сделаем более универсальные функции.
В функцию отправки запроса начнем передавать 2 новых параметра. У HTTPСоединение будем вызывать ВызватьHTTPМетод (Отправляет данные на указанный адрес для обработки с использованием указанного HTTP-метода). В данном методе будем теперь четко указывать "GET", "POST" и другие типы запросов.
Функция ОтправитьЗапросНаСервере(Знач HTTPМетод, Знач АдресРесурса)
...
HTTPЗапрос.АдресРесурса = АдресРесурса;
РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод(HTTPМетод, HTTPЗапрос);
...
КонецФункции
Теперь опишем функцию формирования нашего адреса. В нее передаем базовый url "products", id объекта "1", и список параметров, через структуру типа ключ-значение "limit=5" и т.п.
Создаем массив в который будем будем добавлять все параметры.
МассивПараметров = Новый Массив;
В цикле пробегаемся по всем параметрам, переданным в функцию и с помощью СтрШаблон создаем строку, которую помещаем в массив.
Для каждого Стр Из ПараметрыURL Цикл
ПараметрСтр = СтрШаблон("%1=%2", Стр.Параметр, Стр.Значение);
МассивПараметров.Добавить(ПараметрСтр);
КонецЦикла;
Получаем итоговую строку с помощью СтрСоединить, где в качестве разделителя указываем амперсанд.
ВсеПараметрыСтр = СтрСоединить(МассивПараметров, "&"); // limit=3&sort=desc
Далее в зависимости от того переданы ID и параметры, мы формируем итоговую строку. В результате полный код будет выглядеть так.
&НаКлиенте
Функция СформироватьАдресРесурса(Знач БазовыйАдрес, Знач ID = Неопределено, Знач ПараметрыURL = Неопределено)
МассивПараметров = Новый Массив;
Для каждого Стр Из ПараметрыURL Цикл
ПараметрСтр = СтрШаблон("%1=%2", Стр.Параметр, Стр.Значение);
МассивПараметров.Добавить(ПараметрСтр);
КонецЦикла;
ВсеПараметрыСтр = СтрСоединить(МассивПараметров, "&"); // limit=3&sort=desc
Если ЗначениеЗаполнено(ID) И ЗначениеЗаполнено(ВсеПараметрыСтр) Тогда
ИтоговыйАдрес = СтрШаблон("%1/%2?%3", БазовыйАдрес, Формат(ID, "ЧРГ=''; ЧГ=0"), ВсеПараметрыСтр); // products/1?limit=3
ИначеЕсли ЗначениеЗаполнено(ID) И НЕ ЗначениеЗаполнено(ВсеПараметрыСтр) Тогда
ИтоговыйАдрес = СтрШаблон("%1/%2", БазовыйАдрес, Формат(ID, "ЧРГ=''; ЧГ=0")); // products/1
ИначеЕсли НЕ ЗначениеЗаполнено(ID) И ЗначениеЗаполнено(ВсеПараметрыСтр) Тогда
ИтоговыйАдрес = СтрШаблон("%1?%2", БазовыйАдрес, ВсеПараметрыСтр); // products?limit=3
Иначе
ИтоговыйАдрес = БазовыйАдрес; // products
КонецЕсли;
Возврат ИтоговыйАдрес;
КонецФункции
Обратите внимание на то как мы добавляем числовой параметр в строку, через Формат(ID, "ЧРГ=''; ЧГ=0"). Иначе мы можем получить строку такого вида "products/1 000" с пробелом между цифрами.
Осталось переписать команду ОтправитьЗапрос.
&НаКлиенте
Процедура ОтправитьЗапрос(Команда)
АдресРесурса = СформироватьАдресРесурса(Адрес, IDОбъекта, ПараметрыЗапроса);
Результат = ОтправитьЗапросНаСервере(Метод, АдресРесурса);
КонецПроцедуры
Реквизиты, которые передаем в новые функции разместим на форме.
Скачать готовую обработку
@IlyaNizamov
#1chttp #1с #1c