Динамическое формирование URL‑адресов для API в 1С: как добавить параметры, ограничить объём и сортировать запросы

Введение

В предыдущем посте мы научились получать данные от внешнего сервиса в формате 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

Посмотрите подробное видео: 1С HTTP: динамическое формирование URL‑адресов для API с параметрами

1С HTTP: динамическое формирование URL‑адресов для API с параметрами
1С HTTP: динамическое формирование URL‑адресов для API с параметрами