ym88659208ym87991671
Функция query(url, settings) для смартапов | Документация для разработчиков
Skip to main content

function query(url, settings)

Обновлено 17 октября 2022

Метод предназначен для выполнения внешних http-вызовов.

Параметр url — адрес в виде строки, может содержать параметры, которые будут заполнены из параметра query.

Может содержать сторонний адрес.

caution

В одном запросе можно совершить максимум 15 вызовов. При превышении количества вызовов возращается ошибка:

{
"error": "Callback limit reached",
"status": -1,
"isOk": false
}

Адрес может быть как абсолютным, так и относительным. Для использования относительного адреса, необходимо задать базовый адрес с помощью метода $http.config(settings).

Объект settings содержит параметры запроса:

  • method — http-метод запроса: GET, POST, PUT и т.д.
  • query — параметры запроса для подстановки в url.
  • body — тело запроса.
  • form — форма.
  • headers — http-заголовки.
  • datаType — тип возвращаемых данных: json, xml или text.
  • timeout — таймаут выполнения запроса в миллисекундах.

Возвращаемый объект имеет следующие поля:

  • isOk — при успешном выполнении запроса принимает значение true. При ошибке внутри $http-сервиса или при истечении таймаута принимает значение false.
  • response — полный дамп ответа. При ошибке внутри $http-сервиса или при истечении таймаута запроса принимает значение {}. Может быть использован для получения http-заголовков.
  • error — строка с описанием ошибки. В случае успешного запроса принимает значение undefined. При истечении таймаута принимает значение Read timed out
  • status — числовой код состояния http (например, 200 или 401). При ошибке внутри $http-сервиса или при истечении таймаута запроса принимает значение -1.

Обратите внимание на поведение http-вызовов при различных datаType и Content-Type:

Content-TypedataTypeПоведение
заданзаданИсходящему запросу устанавливается заголовок Content-Type с заданным значением.

Ответ от сервера обрабатывается в соответствии с заданным форматом.
заданне заданИсходящему запросу устанавливается заголовок Content-Type с заданным значением.

Ответ от сервера обрабатывается в формате, полученным в заголовке ответа Content-Type.
не заданзаданИсходящему запросу устанавливается заголовок Content-Type со значением определяемым по dataType:

json → application/json,
xml → application/xml,
text → text/plain,
другое → application/json.

Ответ от сервера обрабатывается в соответствии с заданным форматом.
не заданне задан,
guess
Исходящему запросу устанавливается заголовок Content-Type: application/json.

Ответ от сервера обрабатывается в формате, полученным в заголовке ответа Content-Type.
danger

Стоит обратить внимание, что http-вызовы происходят синхронно. Выполнение функции, вызвавшей $http.query не будет продолжено, до тех пор, пока не будет получен результат вызова.

note

Для обратной совместимости с кодом, который использует асинхронную обработку результатов, объект, возвращаемый функцией query, удовлетворяет интерфейсу Promise.

Для вызова метода API, который принимает входные параметры в формате HTML-форм, в параметрах http-вызова используется объект form вместо body.

Такой вызов будет иметь заголовок Content-Type со значением application/x-www-form-urlencoded и соответствующим образом закодированные поля формы в теле запроса.

danger

Поскольку поля формы передаются через тело запроса, использование метода GET не предусмотрено.


Примеры значений
  • Простейший http-вызов. Здесь $http.query делает запрос, по указанному url с параметрами по умолчанию.
state:
q!: test 1
script:
$reactions.answer($http.query('http://localhost:9001/method1').data.text);
  • Запрос к Weather API.
patterns:
$city = (москв*:moscow/питер*:saint_petersburg) || converter = function($pt){return $pt.value.replace("_","%20");}

state: Weather
q!: Сколько градусов в $city
script:
var q = $parseTree.value;
var url = "https://api.apixu.com/v1/current.json?key=" + $injector.wheatherApiKey + "&q=" + q;
var response = $http.query(url, {method: "GET"});
if (response.isOk) {
$temp.degree = response.data.current.temp_c;
}
a: Сейчас {{ $temp.degree }}°C.
  • Запрос с параметром form.
  $http.post('https://example.com/register-form', {
form: {
username: 'Иван',
email: 'ivan@example.com',
password: 'examplepass',
gender: 'MALE'
}
}
  • Расширенный вариант запроса.
// URL может содержать параметры, которые будут заполнены из параметра query

var result = $http.query('http://localhost:9000/get-with-params?resultPart1=${resultPart1}&resultPart2=${resultPart2}', {
method: "POST", // http-метод запроса - GET, POST, PUT и т.д.
query: { // параметры запроса, для подстановки в URL
resultPart1: 'query',
resultPart2: 'with parameters'
},
body: { payload: "text" }, // тело запроса
form: { formField1: '1', formField2: '2'}, // форма
headers: {"Content-Type": "application/json", "Authorization": "Basic xxxx ="} // http-заголовки
dataType: "json", // тип возвращаемых данных - json, xml или text. По умолчанию используется тип, соответствующий заголовку content-type в ответе
timeout: 10000 // таймаут выполнения запроса в мс
});

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней