/api/. Например, GET threads/ вызывается по адресу https://forum.arzguard.com/api/threads/; номер страницы можно добавить как ?page=1.
Список тем
GET threads/ содержит threads и pagination. Структура успешного ответа зависит от метода и прав доступа.Формат запроса
Все передаваемые данные используют UTF-8. Ключ авторизации обязателен в каждом запросе:YOUR_API_KEY — условное обозначение. Подробнее о типах ключей и контексте пользователя — на странице «Авторизация».
XenForo также допускает параметры в query string у запросов с телом, но рекомендует передавать их в теле. Выбор метода и список допустимых параметров определяет конкретный endpoint.
В JavaScript обычную форму можно подготовить через
URLSearchParams, а форму с файлом — через FormData. При использовании FormData клиент должен самостоятельно сформировать заголовок с boundary; не задавайте Content-Type вручную без этой границы.
Ответы и HTTP-статусы
Обычные ответы возвращаются в JSON. Исключение — методы, явно запрашивающие бинарный файл, например скачивание вложения: такой ответ нужно обрабатывать как файл, а не черезresponse.json().
Стандартный успешный ответ XenForo использует HTTP
200. Не определяйте успех по наличию единого поля вроде success: структура успешного ответа зависит от метода.
Для инфраструктурного сбоя обработчик должен учитывать ситуацию, когда JSON разобрать не удалось. Например, ответ внешнего прокси может отличаться от стандартного тела ошибки XenForo.
Структура ошибки
Стандартный ответ XenForo содержит массивerrors с одной или несколькими ошибками. Ниже — условный пример ошибки неизвестного ключа:
Текст
message может меняться или переводиться. Для распознавания ситуации используйте code, а HTTP-статус сохраняйте как отдельную характеристику. Единого исчерпывающего списка кодов для всех ситуаций нет: они зависят от метода и причины ошибки.
Пример запроса на чтение
Оба примера обращаются кGET threads/; ключу нужен scope thread:read. Они предназначены для серверного окружения с заранее настроенной переменной FORUM_API_KEY. Примеры не содержат реального ключа и не включают обход прав пользователя.
- cURL
- Node.js
--write-out '\nHTTP %{http_code}\n'. Не включайте вывод заголовков запроса с ключом в публичные логи.Пагинация
Пагинация зависит от метода. Если ответ содержитpagination, обрабатывайте страницы по её метаданным и описанию endpoint. Не считайте параметр page или поле pagination обязательными для любого списка.
В постраничных ответах pagination содержит current_page, last_page, per_page, shown и total. При пустой коллекции текущая и последняя страницы могут быть 0. Если запрошенная страница выходит за пределы непустой выдачи, API возвращает ошибку invalid_page с параметром max.
Авторизация
Ключи, scopes и права пользователя, от имени которого работает интеграция.
Контракт REST API XenForo
Официальное руководство по форматам запросов, ответов и ошибок.