$http.config
Метод задает настройки HTTP-клиента по умолчанию.
подсказка
Если вы часто делаете запросы к одному внешнему ресурсу или с одинаковыми настройками, используйте этот метод, чтобы не повторять их при каждом вызове $http.query
.
Также метод позволяет включить кэширование HTTP-ответов.
Синтаксис
Метод принимает в качестве аргумента объект со следующими полями:
Поле | Тип | Описание |
---|---|---|
url | Объект | Параметры базового URL. Обязательно указать все вложенные поля: protocol , host и port . подсказка После настройки базового URL вы можете использовать в вызовах метода $http.query относительные URL-адреса. |
url.protocol | Строка | Протокол базового URL. Возможные значения: http и https . |
url.host | Строка | Хост базового URL. |
url.port | Число | Порт базового URL. Для протокола HTTP обычно это порт 80, для HTTPS — 443. |
timeout | Число | Максимальное время выполнения запроса в миллисекундах. Предельное значение — 25000. |
authHeader | Строка | Значение заголовка Authorization , который будет передаваться с каждым запросом. |
cacheTimeToLiveInSeconds | Число | Время в секундах, на которое будут кэшироваться успешные HTTP-ответы на запросы с параметром cachingRequired . предупреждение Если в сценарии нет вызова $http.config с этим полем, никакие запросы не будут кэшироваться. |
oauth2ResourceDetail | Объект | Настройки авторизации OAuth 2.0. |
$http.config({
url: {
protocol: "https",
host: "example.com",
port: 443
},
timeout: 10000,
authHeader: "Bearer " + $secrets.get("EXAMPLE_COM_BEARER_TOKEN"),
cacheTimeToLiveInSeconds: 3600
})
Пример использования
В следующем примере в качестве базового URL задается URL сервиса OpenWeather и включается кэширование HTTP-ответов на 10 минут. Это позволяет уменьшить расход квоты при повторных запросах погоды для одного и того же города.
Где задавать настройки по умолчанию
Чаще всего $http.config
вызывается в стартовом стейте, в который бот попадает в начале диалога с пользователем,
либо внутри тега init
.
require: city/city.sc
module = sys.zb-common
init:
$http.config({
url: {
protocol: "https",
host: "api.openweathermap.org",
port: 443
},
cacheTimeToLiveInSeconds: 600
});
theme: /
state: CurrentWeather
q!: * сколько [сейчас] градус* [в] $City *
script:
$temp.response = $http.query("/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${appid}&units=${units}", {
query: {
lat: $parseTree._City.lat,
lon: $parseTree._City.lon,
appid: $secrets.get("OPENWEATHER_API_KEY"),
units: "metric"
},
cachingRequired: true
});
if: $temp.response.isOk
a: Сейчас в городе {{$parseTree._City.name}} {{Math.floor($temp.response.data.main.temp)}} °C.
else:
a: У меня не получилось узнать погоду. Попробуйте ещё раз.