Введение
В предыдущем посте мы научились получать данные от внешнего сервиса в формате JSON и преобразовывать их в объекты 1С. Теперь рассмотрим, как управлять запросами к API: выбирать конкретный объект, ограничивать количество возвращаемых товаров и сортировать результаты. Каждый сервис имеет свои параметры, но обычно они выглядят так:
https://fakestoreapi.com/products/1 – товар с ID=1
https://fakestoreapi.com/products?limit=5 – 5 товаров
https://fakestoreapi.com/products?sort=desc – сортировка по убыванию
Наша задача – сформировать такой URL в 1С и отправить запрос.
Формирование URL‑адреса
Для универсальности создаём функцию, которая принимает базовый адрес, необязательный 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.
Отправка запроса к серверу
В функцию отправки запроса добавляем два новых параметра: HTTP‑метод и адрес ресурса. Внутри используется HTTPСоединение.ВызватьHTTPМетод, который принимает явно указанный метод (GET, POST и т.д.).
&НаКлиенте
Функция ОтправитьЗапросНаСервере(Знач HTTPМетод, Знач АдресРесурса)
HTTPЗапрос.АдресРесурса = АдресРесурса;
РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод(HTTPМетод, HTTPЗапрос);
Возврат РезультатЗапроса;
КонецФункции
И теперь связываем всё вместе в процедуре, которую можно вызвать с нужными параметрами:
&НаКлиенте
Процедура ОтправитьЗапрос(Команда)
АдресРесурса = СформироватьАдресРесурса(Адрес, IDОбъекта, ПараметрыЗапроса);
Результат = ОтправитьЗапросНаСервере(Метод, АдресРесурса);
КонецПроцедуры
Итого
Теперь вы можете гибко строить запросы к любому API, добавляя нужные параметры, ограничивая объём данных и сортируя результаты. Весь код можно разместить на форме, чтобы быстро менять параметры и тестировать запросы.
Автор: Ilya Nizamov
