Альтернативный Форум

только свобода — только рок: 20 лет, 7 месяцев, 13 дней. 🔥🔥
Вернуться   Альтернативный Форум > Документация
Перезагрузить страницу REST API — Руководство разработчика
Поиск документов Поиск документов
Поиск по ключевым словам:
Настройки поиска:
Поиск в:

Обзор и подключение

Базовый URL

Код:
https://af.net.ru/api.php

Формат запроса

Все запросы выполняются к одному эндпоинту. Метод передаётся параметром method:

Код:
GET  https://af.net.ru/api.php?method=METHOD_NAME
POST https://af.net.ru/api.php?method=METHOD_NAME

Обязательные заголовки

Заголовки запроса
X-API-KeyОбязателенКлюч вашего приложения. Получить в AdminCP → REST API.
X-Auth-TokenДля user-методовТокен пользователя, полученный через user.login.
Content-TypeДля POSTapplication/x-www-form-urlencoded

Формат ответа

API всегда возвращает JSON с HTTP-заголовком Content-Type: application/json.


Аутентификация

API использует двухуровневую аутентификацию.

Уровень 1 — API Key (обязателен для всех запросов)

Каждое приложение получает уникальный API Key. Передаётся в заголовке:

Код:
X-API-Key: ваш_ключ_приложения

API Key управляется в AdminCP → REST API. У каждого ключа есть права (read, write, moderate, admin) и лимит запросов в минуту.

Уровень 2 — User Token (для методов уровня user/moderator/admin)

Для действий от лица пользователя нужно сначала получить токен:

Код:
POST /api.php?method=user.login
X-API-Key: ваш_ключ

username=логин&password=пароль

В ответе вернётся:

Код:
{
  "token": "abc123...",
  "expires_at": 1778400000,
  "user": { "userid": 42, "username": "Vasya", ... }
}

Далее передавайте токен в заголовке:

Код:
X-Auth-Token: abc123...

Токен действителен 30 дней. После истечения нужно повторить user.login.

Уровни доступа методов

УровеньТребует X-Auth-TokenОписание
publicНетДостаточно X-API-Key
userДаЛюбой авторизованный пользователь
moderatorДаПользователь должен быть модератором
adminДаПользователь должен иметь доступ к AdminCP

Формат ответов

Все ответы API имеют одинаковую JSON-структуру.

Успешный ответ (HTTP 200)

Код:
{
  "field1": "value1",
  "field2": 42
}

Данные возвращаются напрямую, без обёртки.

Ответ с ошибкой

Код:
{
  "error": {
    "code": 401,
    "message": "Invalid or missing API Key."
  }
}

HTTP-статус ответа соответствует коду ошибки в теле.


Коды ошибок
HTTP кодЗначениеПричина
200OKЗапрос выполнен успешно
400Bad RequestОтсутствуют обязательные параметры
401UnauthorizedНеверный или отсутствующий API Key / токен пользователя
403ForbiddenНедостаточно прав у ключа или пользователя
404Not FoundМетод не найден
405Method Not AllowedНеверный HTTP-метод (напр. GET вместо POST)
429Too Many RequestsПревышен rate limit. Заголовок Retry-After: 60
500Internal Server ErrorВнутренняя ошибка сервера

Rate Limiting

Каждое приложение имеет лимит запросов в минуту (rate limit), заданный в настройках ключа.

По умолчанию: 120 запросов/мин.

При превышении лимита API вернёт:

Код:
HTTP/1.1 429 Too Many Requests
Retry-After: 60

{
  "error": {
    "code": 429,
    "message": "Rate limit exceeded. Please try again later."
  }
}

Подождите Retry-After секунд и повторите запрос.

Счётчик сбрасывается каждые 60 секунд.


Справочник методов

test.hello

HTTPGET
Уровеньpublic
Параметры
ОписаниеПроверка соединения. Возвращает название форума и текущий timestamp.
Код:
curl -X GET "https://af.net.ru/api.php?method=test.hello" \
  -H "X-API-Key: ВАШ_КЛЮЧ"
Код:
{
  "message": "Hello from the vBulletin REST API!",
  "forum_title": "Альтернативный Форум",
  "current_user": "Guest",
  "timestamp": 1775803196
}

forums.list

HTTPGET
Уровеньpublic
Параметры
ОписаниеСписок форумов, доступных текущему пользователю (или гостю).
Код:
curl -X GET "https://af.net.ru/api.php?method=forums.list" \
  -H "X-API-Key: ВАШ_КЛЮЧ"
Код:
{
  "forums": [
    { "forumid": 1, "title": "...", "parentid": 0, "threads": 42, "posts": 1337 },
    ...
  ],
  "total": 25
}

user.login

HTTPPOST
Уровеньpublic
Параметры POSTusername (string), password (string)
ОписаниеАутентификация пользователя. Возвращает токен для последующих запросов.
Код:
curl -X POST "https://af.net.ru/api.php?method=user.login" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -d "username=Vasya&password=секрет"
Код:
{
  "token": "a1b2c3d4...",
  "expires_at": 1778400000,
  "user": { "userid": 42, "username": "Vasya", "usergroupid": 2, "email": "..." }
}

user.me

HTTPGET
Уровеньuser
Параметры
ОписаниеДанные текущего авторизованного пользователя.
Код:
curl -X GET "https://af.net.ru/api.php?method=user.me" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -H "X-Auth-Token: ВАШ_ТОКЕН"
Код:
{
  "userid": 42, "username": "Vasya", "email": "...",
  "usergroupid": 2, "posts": 150, "joindate": 1600000000
}

user.logout

HTTPPOST
Уровеньuser
Параметры
ОписаниеИнвалидирует текущий токен пользователя.
Код:
curl -X POST "https://af.net.ru/api.php?method=user.logout" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -H "X-Auth-Token: ВАШ_ТОКЕН"
Код:
{ "message": "Logged out successfully." }

Примеры кода

PHP (cURL)

Код:
<?php
define('API_BASE', 'https://af.net.ru/api.php');
define('API_KEY',  'ВАШ_КЛЮЧ');

function api_get(string $method, string $token = ''): array {
    $ch = curl_init(API_BASE . '?method=' . $method);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => array_filter([
            'X-API-Key: ' . API_KEY,
            $token ? 'X-Auth-Token: ' . $token : '',
        ]),
    ]);
    return json_decode(curl_exec($ch), true);
}

function api_post(string $method, array $data, string $token = ''): array {
    $ch = curl_init(API_BASE . '?method=' . $method);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($data),
        CURLOPT_HTTPHEADER     => array_filter([
            'X-API-Key: ' . API_KEY,
            $token ? 'X-Auth-Token: ' . $token : '',
        ]),
    ]);
    return json_decode(curl_exec($ch), true);
}

// Логин
$auth = api_post('user.login', ['username' => 'Vasya', 'password' => 'секрет']);
$token = $auth['token'];

// Данные пользователя
$me = api_get('user.me', $token);
echo $me['username'];

// Список форумов
$forums = api_get('forums.list');
foreach ($forums['forums'] as $f) {
    echo $f['title'] . "\n";
}

Python (requests)

Код:
import requests

API_BASE = "https://af.net.ru/api.php"
API_KEY  = "ВАШ_КЛЮЧ"
headers  = {"X-API-Key": API_KEY}

# Логин
r = requests.post(API_BASE, params={"method": "user.login"},
                  headers=headers, data={"username": "Vasya", "password": "секрет"})
token = r.json()["token"]
auth_headers = {**headers, "X-Auth-Token": token}

# Данные пользователя
me = requests.get(API_BASE, params={"method": "user.me"}, headers=auth_headers).json()
print(me["username"])

# Список форумов
forums = requests.get(API_BASE, params={"method": "forums.list"}, headers=headers).json()
for f in forums["forums"]:
    print(f["title"])

JavaScript (fetch)

Код:
const API_BASE = "https://af.net.ru/api.php";
const API_KEY  = "ВАШ_КЛЮЧ";

async function apiGet(method, token = null) {
  const headers = { "X-API-Key": API_KEY };
  if (token) headers["X-Auth-Token"] = token;
  const r = await fetch(`${API_BASE}?method=${method}`, { headers });
  return r.json();
}

async function apiPost(method, data, token = null) {
  const headers = { "X-API-Key": API_KEY, "Content-Type": "application/x-www-form-urlencoded" };
  if (token) headers["X-Auth-Token"] = token;
  const r = await fetch(`${API_BASE}?method=${method}`, {
    method: "POST",
    headers,
    body: new URLSearchParams(data),
  });
  return r.json();
}

// Логин
const { token } = await apiPost("user.login", { username: "Vasya", password: "секрет" });

// Профиль
const me = await apiGet("user.me", token);
console.log(me.username);

// Форумы
const { forums } = await apiGet("forums.list");
forums.forEach(f => console.log(f.title));

Powered by vBulletin® Version 3.8.11 PL4;
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd;
Оператор обработки ПДн - ИП Алексеев А.С.;
ИНН: 333411310227; ОГРН: 307333419200050;
тел. +7 (4922) 49-42-22, legal@smalta.net;
Часовой пояс GMT +3, время: 08:15.
Любые сообщения на Альтернативном Форуме — являются субъективным отражением реальности, написавших их авторов и публикуются без предварительной модерации. Администрация форума не принимает на себя ответственность за содержание таких материалов. В рамках функционирования форума осуществляется хранение ограниченного набора данных: имя пользователя, адрес электронной почты, IP-адрес (в момент входа) и cookie для поддержки сессии. Метаданные пользователей обрабатываются и направляются в уполномоченные органы только при наличии официального запроса в порядке, установленном законодательством РФ. В случае выявления противоправного контента, пожалуйста, направляйте уведомление через кнопку «Жалоба» или форму обратной связи.
ИКС