🔌 API Документация

Публичное REST API для генерации, валидации и работы с русскими словами

О API

Вавилонская Библиотека предоставляет бесплатное публичное API для генерации случайных русских слов и их валидации через Wiktionary API. API использует современные технологии оптимизации для обеспечения высокой производительности даже при работе с большими объемами данных.

Основные возможности:

  • Генерация слов: Создание случайных комбинаций из 33 букв русского алфавита
  • Валидация через Wiktionary: Проверка существования слов в открытом словаре
  • Высокая производительность: Batch-запросы и многопоточность для обработки до 100.000 слов
  • Автоматическое сохранение: Валидные слова автоматически добавляются в лидерборд
  • Статистика: Получение данных о самых редких и популярных словах

⚡ Производительность и оптимизация

API использует несколько технологий для максимальной скорости работы:

  • Batch-запросы: Проверка до 50 слов за один HTTP-запрос к Wiktionary API (вместо 50 отдельных запросов)
  • Многопоточность: Параллельная обработка до 30 batch-запросов одновременно
  • Connection pooling: Переиспользование TCP-соединений для снижения задержек
  • Кэширование: LRU-кэш на 5000 записей для мгновенной проверки повторяющихся слов
  • Retry-стратегия: Автоматические повторы при временных сбоях

Пример: Проверка 10.000 слов занимает ~200 batch-запросов вместо 10.000 отдельных, что ускоряет процесс примерно в 50 раз.

🔍 Валидация слов

Валидация слов осуществляется через публичный Wiktionary API - открытый многоязычный словарь, содержащий:

  • Русские слова (включая устаревшие и диалектные)
  • Славянские слова
  • Иноязычные слова на кириллице
  • Сленговые выражения
  • Заимствованные слова, используемые в русском языке
  • Собственные имена и топонимы

Важно: Если слово присутствует в Wiktionary, оно считается валидным, независимо от его стилистической окраски или частоты использования.

POST /api/generate-and-validate/

Основной endpoint для генерации слов с автоматической валидацией. Генерирует случайные комбинации букв и сразу проверяет их существование через Wiktionary API. Использует оптимизированные batch-запросы и многопоточность (до 30 потоков) для максимальной скорости. Все валидные слова автоматически сохраняются в базу данных и учитываются в лидерборде.

Параметры запроса (JSON в теле запроса):

  • count (int, обязательный) - количество слов для генерации. Диапазон: 1-100.000. Рекомендуется использовать значения от 100 до 10,000 для оптимального баланса скорости и нагрузки.
  • min_length (int, опциональный, по умолчанию 3) - минимальная длина слова. Диапазон: 1-50. Должно быть меньше или равно max_length.
  • max_length (int, опциональный, по умолчанию 10) - максимальная длина слова. Диапазон: 1-50. Должно быть больше или равно min_length.

Пример запроса (cURL):

curl -X POST https://babellib.ru/api/generate-and-validate/ \
  -H "Content-Type: application/json" \
  -d '{
    "count": 1000,
    "min_length": 3,
    "max_length": 10
  }'

Пример запроса (JavaScript/Fetch):

fetch('/api/generate-and-validate/', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        count: 1000,
        min_length: 3,
        max_length: 10
    })
})
.then(response => response.json())
.then(data => {
    console.log('Валидных слов:', data.valid_count);
    console.log('Невалидных слов:', data.invalid_count);
    console.log('Валидные слова:', data.valid_words);
});

Пример запроса (Python/requests):

import requests

response = requests.post(
    'https://babellib.ru/api/generate-and-validate/',
    json={
        'count': 1000,
        'min_length': 3,
        'max_length': 10
    }
)

data = response.json()
print(f"Валидных: {data['valid_count']}, Невалидных: {data['invalid_count']}")

Структура ответа:

{
    "success": true,              // Успешность операции
    "valid_words": [              // Массив валидных слов (существующих в словаре)
        "кот",
        "дом",
        "вода"
    ],
    "invalid_words": [            // Массив невалидных слов (не существующих)
        "йтлр",
        "елгйцдь",
        "кцию"
    ],
    "valid_count": 3,             // Количество валидных слов
    "invalid_count": 997,         // Количество невалидных слов
    "total_generated": 1000      // Общее количество сгенерированных слов
}

Примечания:

  • Время обработки зависит от количества слов: ~1-2 секунды для 1000 слов, ~10-20 секунд для 10.000 слов
  • Валидные слова автоматически сохраняются в базу данных с обновлением счетчика нахождений
  • Слова не сохраняются в сессии — этот endpoint предназначен для внешних клиентов
  • Rate limit: 30 запросов в минуту
POST /api/generate/

Генерирует случайные слова без валидации. Работает значительно быстрее, чем /api/generate-and-validate/, так как не выполняет проверку существования слов через Wiktionary API. Полезен для быстрой генерации больших объемов случайных комбинаций букв.

Параметры запроса (JSON):

  • count (int, 1-1.000) - количество слов для генерации
  • min_length (int, 1-50, по умолчанию 3) - минимальная длина слова
  • max_length (int, 1-50, по умолчанию 10) - максимальная длина слова

Пример запроса:

POST /api/generate/
Content-Type: application/json

{
    "count": 5000,
    "min_length": 4,
    "max_length": 8
}

Пример ответа:

{
    "success": true,
    "words": [
        "кот",
        "дом",
        "вода",
        ...
    ],
    "count": 5000
}

Примечания:

  • Генерация 10,000 слов занимает менее 1 секунды
  • Сгенерированные слова сохраняются в сессии для возможности валидации через /api/save/
  • Rate limit: 30 запросов в минуту
POST /api/save/

Сохраняет слово в базу данных. Слово должно быть предварительно сгенерировано через API (сохранено в сессии) и существовать в словаре Wiktionary. При успешном сохранении увеличивается счетчик нахождений слова, и оно может появиться в лидерборде.

Параметры запроса (JSON):

  • word (string, обязательный) - слово для сохранения. Максимальная длина: 100 символов. Должно содержать только буквы русского алфавита.

Пример запроса:

POST /api/save/
Content-Type: application/json

{
    "word": "кот"
}

Пример успешного ответа:

{
    "success": true,
    "message": "Слово \"кот\" сохранено впервые! 🎉",
    "word": "кот",
    "found_count": 1,
    "is_new": true
}

Пример ответа для повторного сохранения:

{
    "success": true,
    "message": "Слово \"кот\" найдено повторно! Всего нахождений: 5",
    "word": "кот",
    "found_count": 5,
    "is_new": false
}

Пример ошибки:

{
    "success": false,
    "error": "Это слово не было сгенерировано на сайте. Сначала сгенерируйте слова."
}

Возможные ошибки:

  • Слово не указано - параметр word отсутствует или пуст
  • Слово слишком длинное - превышен лимит в 100 символов
  • Слово содержит недопустимые символы - обнаружены HTML-символы или спецсимволы
  • Это слово не было сгенерировано на сайте - слово отсутствует в сессии пользователя
  • Вы уже сохраняли это слово - попытка повторного сохранения в рамках одной сессии
  • Это слово не существует в русском языке - слово не найдено в Wiktionary

Rate limit: 20 запросов в минуту

GET /api/leaderboard/

Получает таблицу лидеров с самыми редкими и популярными словами. Слова сортируются по количеству нахождений, а среди слов с одинаковым количеством - по длине (более длинные слова имеют приоритет в списке редких слов).

Параметры запроса (query string):

  • limit (int, опциональный, по умолчанию 15) - количество слов в каждом топе. Диапазон: 1-1000. Влияет на размер обоих списков (редкие и популярные).

Пример запроса:

GET /api/leaderboard/?limit=20

Структура ответа:

{
    "success": true,
    "rarest": [                    // Список самых редких слов (наименьшее количество нахождений)
        {
            "text": "редкоеслово",
            "found_count": 1        // Количество раз, когда слово было найдено
        },
        {
            "text": "другоередкое",
            "found_count": 1
        }
    ],
    "popular": [                   // Список самых популярных слов (наибольшее количество нахождений)
        {
            "text": "кот",
            "found_count": 42
        },
        {
            "text": "дом",
            "found_count": 35
        }
    ],
    "unique_words": 1250,          // Общее количество уникальных слов в базе данных
    "total_found_count": 8430,     // Сумма всех нахождений всех слов
    "words_by_length": {           // Распределение слов по длине
        "3": 120,
        "4": 340,
        "5": 450,
        "6": 210,
        "7": 80,
        "8": 35,
        "9": 10,
        "10": 5
    }
}

Логика сортировки:

  • Редкие слова: Сначала по found_count (по возрастанию), затем по длине слова (по убыванию), затем по дате создания (по убыванию)
  • Популярные слова: Сначала по found_count (по убыванию), затем по дате создания (по убыванию)

Rate limit: 60 запросов в минуту

⏱️ Rate Limiting

Все API endpoints защищены системой ограничения частоты запросов для обеспечения стабильности и справедливого использования ресурсов:

Endpoint Лимит запросов Период
/api/generate-and-validate/ 30 60 секунд
/api/generate/ 30 60 секунд
/api/save/ 20 60 секунд
/api/leaderboard/ 60 60 секунд

При превышении лимита API возвращает HTTP статус 429 Too Many Requests с сообщением об ошибке.

❌ Обработка ошибок

Все API endpoints возвращают JSON-ответы в едином формате:

Успешный ответ:

{
    "success": true,
    ...
}

Ошибка:

{
    "success": false,
    "error": "Описание ошибки"
}

HTTP статус коды:

  • 200 OK - успешный запрос
  • 400 Bad Request - некорректные параметры запроса
  • 429 Too Many Requests - превышен rate limit
  • 500 Internal Server Error - внутренняя ошибка сервера

Примечание: API находится в активной разработке. При обнаружении проблем или предложений по улучшению, пожалуйста, свяжитесь с создателем проекта.

Все данные обрабатываются в реальном времени. Кэширование используется только для оптимизации повторных проверок одинаковых слов в рамках одного запроса.