JavaScript
Замените https://example.ru/api/ адресом своего API. Нужные наборы роутов должны быть включены.
Отправка запроса
Примеры для браузера. Функция возвращает тело ответа, включая ответы с HTTP-ошибкой
const apiUrl = 'https://example.ru/api/'
async function apiRequest(path, {method = 'GET', authorization, body} = {}) {
const headers = new Headers()
if (authorization) headers.set('Authorization', authorization)
if (body !== undefined) headers.set('Content-Type', 'application/json')
const response = await fetch(new URL(path, apiUrl), {
method,
headers,
credentials: 'same-origin',
body: body === undefined ? undefined : JSON.stringify(body),
})
return response.text()
}Сервисные роуты
Параметры адреса
// Проверить работу API
console.log(await apiRequest('up'))
// Передать id в адресе и name в строке запроса
console.log(await apiRequest('up/user/15?name=Ivan'))Передача JSON
// Передать параметры в теле запроса
console.log(await apiRequest('up', {
method: 'POST',
body: {name: 'Иван', quantity: 2},
}))XML-ответ
// Отправить JSON и получить XML-ответ встроенного PUT-роута
console.log(await apiRequest('up', {
method: 'PUT',
body: {name: 'Иван'},
}))// Выбрать XML для GET-запроса
console.log(await apiRequest('up?format=xml'))Доступ по группам
// HTTP 403: в штатной карте задан whitelist без авторизации API
console.log(await apiRequest('up/group/1'))Вызываемый класс
// Проверить вызываемый класс; данные не удаляются
console.log(await apiRequest('up', {method: 'DELETE'}))Токены
При AUTH_MFA_REQUIRED для выпуска и списка токенов через Basic нужны cookie сессии того же пользователя после входа с MFA. При запросе к тому же сайту cookie передаются автоматически — сначала завершите вход с MFA.
Подставьте логин, пароль, <ACCESS_TOKEN>, <REFRESH_TOKEN> и <CLIENT_ID>. Клиента определяют заголовки браузера.
Выпускайте и используйте пару в одном клиенте: перенос привязанного токена из другого браузера или cURL
приведёт к HTTP 401. Изменение заголовков после обновления браузера или смены языка также может потребовать
повторного выпуска пары.
const login = 'login'
const password = '<PASSWORD>'
const accessToken = '<ACCESS_TOKEN>'
const refreshToken = '<REFRESH_TOKEN>'
const clientId = '<CLIENT_ID>'
const bytes = new TextEncoder().encode(`${login}:${password}`)
const credentials = btoa(Array.from(bytes, byte => String.fromCharCode(byte)).join(''))
const basicAuthorization = `Basic ${credentials}`Выпуск
// Создать пару токенов
console.log(await apiRequest('token', {
method: 'POST',
authorization: basicAuthorization,
}))Обновление
// Заменить пару по refresh-токену
console.log(await apiRequest('token', {
method: 'PUT',
authorization: `Bearer ${refreshToken}`,
}))Список
// Получить активные токен-сессии пользователя
console.log(await apiRequest('token', {authorization: basicAuthorization}))Отзыв
// client.id берётся из списка сессий
console.log(await apiRequest(`token?client_id=${encodeURIComponent(clientId)}`, {
method: 'DELETE',
authorization: `Bearer ${accessToken}`,
}))После выпуска или обновления сохраните оба токена из ответа: access и refresh. Поля ответа и правила работы с токенами.
Провайдер
Описание метода
// Узнать параметры разрешённого метода
const query = new URLSearchParams({
class: 'Bitrix\\Main\\Localization\\Loc',
method: 'getCurrentLang',
})
console.log(await apiRequest(`provider?${query}`, {
authorization: `Bearer ${accessToken}`,
}))Выполнение метода
// Получить текущий язык Битрикса
console.log(await apiRequest('provider', {
method: 'POST',
authorization: `Bearer ${accessToken}`,
body: {
class: 'Bitrix\\Main\\Localization\\Loc',
method: 'getCurrentLang',
},
}))Для другого домена разрешите Origin, Authorization и Content-Type в CORS.