Этот раздел описывает все HTTP-точки входа API, присутствующие в текущем сервере AllStore. Для новых клиентов используйте /api/v3; совместимые публичные адреса /api/apps и некоторые служебные /api/* сохранены для старых клиентов.
Базовый адрес: http://alldevicestore.ru
Основной префикс: http://alldevicestore.ru/api/v3
Кодировка: UTF-8. Метаданные: JSON или form-data. Файлы: multipart/form-data.
Машиночитаемый список маршрутов: http://alldevicestore.ru/api/v3.
Большинство v3-методов используют единый контейнер ответа:
{"status":"ok","api_version":3,"data":{...}} {"status":"error","api_version":3, "error":{"code":"invalid_token","message":"Нужен действующий Bearer-токен."}}
Списковые методы дополнительно могут возвращать pagination, а некоторые — filters, summary или другие служебные поля верхнего уровня. Клиенту рекомендуется игнорировать неизвестные поля для прямой совместимости с будущими обновлениями.
Авторизованные запросы передают токен в заголовке:
Authorization: Bearer ВАШ_ТОКЕН Accept: application/json
Токен создаётся при регистрации или входе, действует 90 дней и повторно в открытом виде не выдаётся. После смены пароля остальные API-токены и старые веб-сеансы отзываются. При обязательной смене пароля разрешены только GET /api/v3/me, PUT /api/v3/me/password и POST /api/v3/auth/logout.
Роли: user, developer, moderator, admin, creator. Обозначение Staff ниже означает moderator/admin/creator.
import json
from urllib.request import Request, urlopen
BASE = "http://alldevicestore.ru" # Вход body = json.dumps({ "username": "login", "password": "password", "client_name": "My Python client" }).encode("utf-8") req = Request(BASE + "/api/v3/auth/login", data=body, headers={"Content-Type": "application/json"}, method="POST") with urlopen(req) as r: token = json.load(r)["data"]["token"] # Авторизованный запрос req = Request(BASE + "/api/v3/me", headers={"Authorization": "Bearer " + token, "Accept": "application/json"}) with urlopen(req) as r: profile = json.load(r)["data"] print(profile["username"])
Пример рассчитан на MIDP/CLDC HttpConnection. На обычной Java логика та же, но можно использовать стандартный HTTP-клиент своей версии JDK.
HttpConnection c = (HttpConnection) Connector.open(baseUrl + "/api/v3/me");
c.setRequestMethod(HttpConnection.GET);
c.setRequestProperty("Accept", "application/json");
c.setRequestProperty("Authorization", "Bearer " + token);
int code = c.getResponseCode();
InputStream in = c.openInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n;
while ((n = in.read(buf)) != -1) out.write(buf, 0, n);
String json = new String(out.toByteArray(), "UTF-8");
in.close();
c.close();
Для Java ME используйте небольшой per_page (например 10), читайте ответы потоково и не запрашивайте gzip, если устройство само его не распаковывает. Bearer-токен передавайте только по HTTPS и храните как секрет, например в RMS.
| Метод | Путь | Доступ | Назначение |
|---|---|---|---|
| GET | /api-docs | Публично | HTML-страница этой документации; не JSON API. |
| GET | /api/v3 | Публично | Машиночитаемый индекс всех маршрутов v3. |
| POST | /api/v3/auth/register | Публично | Регистрация и выпуск первого токена. |
| POST | /api/v3/auth/login | Публично | Вход и выпуск нового токена клиента. |
| POST | /api/v3/auth/logout | Bearer | Отзыв текущего токена. |
| GET/PATCH/DELETE | /api/v3/me | Bearer | Профиль, изменение профиля, удаление аккаунта. |
| PUT | /api/v3/me/password | Bearer | Смена пароля. |
| GET | /api/v3/users/{username} | Публично | Публичный профиль и опубликованные приложения пользователя. |
| GET | /api/v3/apps | Публично | Каталог v3: поиск, фильтры, сортировка, пагинация. |
| POST | /api/v3/apps | developer/admin/creator | Публикация приложения. |
| GET | /api/v3/apps/{app_id} | Публично | Полная карточка опубликованного приложения. |
| PATCH/DELETE | /api/v3/apps/{app_id} | developer/Staff* | Редактирование или скрытие приложения; дополнительно проверяются права на конкретный объект. |
| POST | /api/v3/apps/{app_id}/restore | Bearer* | Восстановление скрытого приложения при наличии права на восстановление. |
| POST | /api/v3/apps/import | developer/admin/creator | Публикация 1–10 ZIP-архивов. |
| POST | /api/v3/apps/{app_id}/import | developer/admin/creator* | Обновление существующего приложения ZIP-архивом. |
| GET | /api/v3/apps/{app_id}/comments | Публично | Комментарии приложения. |
| POST | /api/v3/apps/{app_id}/comments | Bearer | Добавить комментарий или ответ. |
| PATCH | /api/v3/comments/{comment_id} | Автор комментария | Изменить свой комментарий. |
| DELETE | /api/v3/comments/{comment_id} | Bearer* | Скрыть комментарий при наличии права. |
| POST | /api/v3/comments/{comment_id}/restore | Bearer* | Восстановить комментарий при наличии права. |
| PUT/DELETE | /api/v3/apps/{app_id}/rating | Bearer | Поставить/изменить оценку 1–5 или удалить свою оценку. |
| GET/POST | /api/v3/reports | Bearer | Получить доступные жалобы или создать жалобу. |
| GET/PATCH | /api/v3/reports/{report_id} | Bearer* | Карточка жалобы, события и действия workflow. |
| POST | /api/v3/reports/{report_id}/resolve | Staff | Совместимый короткий маршрут закрытия жалобы. |
| POST | /api/v3/reports/bulk | Staff | Массовые действия над жалобами. |
| GET | /api/v3/admin/users | Staff | Поиск и фильтрация пользователей. |
| PATCH | /api/v3/admin/users/{user_id} | Staff* | Блокировка/разблокировка и смена роли по полномочиям. |
| POST | /api/v3/admin/users/{user_id}/actions | Staff* | Предупреждение, заметка, бан, роль, отзыв сеансов, сброс пароля. |
| GET | /api/v3/admin/users/{user_id}/history | Staff* | История действий по пользователю. |
| POST | /api/v3/admin/users/bulk | Staff | Массовые действия над пользователями. |
| GET | /api/v3/admin/logs | creator | Хвост серверного журнала. |
| GET | /api/v3/me/apps | Bearer | Свои приложения, включая скрытые. |
| GET | /api/v3/me/favorites | Bearer | Список избранного. |
| PUT/DELETE | /api/v3/me/favorites/{app_id} | Bearer | Добавить/удалить приложение из избранного. |
| GET | /api/v3/me/warnings | Bearer | Собственные предупреждения. |
| GET | /api/v3/me/tokens | Bearer | Список токенов без секретов. |
| DELETE | /api/v3/me/tokens/{token_id} | Bearer | Отозвать выбранный токен. |
| GET/PATCH | /api/v3/me/settings | Bearer | Настройки интерфейса пользователя. |
| GET/POST | /api/v3/me/styles | Bearer | Список личных CSS или загрузка CSS. |
| PUT/DELETE | /api/v3/me/styles/{style_id} | Bearer | Выбрать или удалить личный стиль. |
| GET | /api/v3/me/client-data | Bearer | Список namespace внешнего клиента. |
| GET/PUT/DELETE | /api/v3/me/client-data/{namespace} | Bearer | Персональное JSON-хранилище клиента до 64 КБ на namespace. |
| GET | /api/v3/apps/{app_id}/versions | Публично | Коллекция версий/build приложения. |
| GET | /api/v3/apps/{app_id}/versions/{version_id} | Публично | Подробности версии и языков. |
| GET | /api/v3/apps/{app_id}/versions/{version_id}/files | Публично | Языки и файлы JAR/JAD/прочие с SHA-256 и download_url. |
| GET | /api/apps | Публично | Совместимый каталог старых клиентов, до 50 записей на страницу. |
| GET | /api/apps/{app_id} | Публично | Совместимая карточка приложения. |
| GET | /api/apps/{app_id}/versions | Публично | Алиас списка версий. |
| GET | /api/apps/{app_id}/versions/{version_id} | Публично | Алиас карточки версии. |
| GET | /api/apps/{app_id}/versions/{version_id}/files | Публично | Алиас списка файлов версии. |
| GET | /api/categories | Публично | Справочник категорий приложений. |
| GET | /api/devices | Публично | Платформы, версии устройств, ID и лимиты размера. |
| GET | /api/languages | Публично | Доступные языковые пакеты интерфейса. |
| GET | /api/client-info | Публично | Краткое описание возможностей для автоматического определения функций клиента. |
| GET | /api/health | Публично | Проверка сервера/SQLite; 200 либо 503. |
| GET | /api/upload-progress/{job_id} | Веб-сессия | Прогресс upload_job. Это не Bearer-маршрут: требуется обычный вошедший веб-сеанс владельца job. |
* Наличие Bearer-токена или подходящей роли не гарантирует право на конкретный объект: сервер дополнительно проверяет автора материала, иерархию ролей, состояние объекта, revision и другие ограничения.
JSON/form-data: username (3–32 символа: буквы, цифры, _, -), password (8–256), необязательно client_name. Создаёт обычного пользователя и сразу возвращает user, token, token_type=Bearer, expires_at. HTTP 201.
Поля: username, password, необязательно client_name. После серии ошибочных попыток действует ограничение входа; возможен HTTP 429.
POST /api/v3/auth/login
Content-Type: application/json
{"username":"demo","password":"StrongPassword123","client_name":"AllStore J2ME"}
Отзывает только токен, которым выполнен текущий запрос.
Возвращает активные токены с метаданными и признаком current, но никогда не возвращает их секретное значение.
Отзывает токен текущего пользователя по его ID.
Приватный профиль: публичные поля плюс email, website, country, birth_date, must_change_password и settings.
Изменяемые поля: username, description, email, website, country, birth_date. Иконку можно передать multipart-полем icon. Новые строки в описаниях сохраняются; в JSON используйте \n.
Удаляет собственный аккаунт. Аккаунт с ролью creator защищён от этого метода.
JSON: old_password, new_password. Новый пароль не должен совпадать с текущим или использованными за последние 30 дней. При успехе сервер отзывает остальные токены и старые веб-сеансы.
Публичный профиль пользователя и массив его опубликованных приложений.
Настройки интерфейса. Текущий сервер поддерживает поля theme, text_size, density, ico_mode и связанные поддерживаемые сервером настройки. PATCH изменяет только переданные допустимые поля.
Список собственных предупреждений с пагинацией.
Query-параметры: page, per_page (1–100), q, category, device, device_category, sort = popular|new|rating, search_versions=0|1. По умолчанию поиск учитывает коллекции версий.
GET http://alldevicestore.ru/api/v3/apps?q=opera&device_category=Java%20ME&sort=new&per_page=10
Краткая карточка содержит, среди прочего: id, name, package_name, version, платформу, описания, число загрузок, рейтинг, автора, URL и размер основного файла, и version_collection.
Добавляет полное описание, keywords, скриншоты, дополнительные файлы, последние комментарии, профиль автора и статус.
Сохраняются для старых клиентов. В старом списке per_page ограничен 50; структура пагинации исторически отличается от v3. Для нового клиента используйте v3.
POST /api/v3/apps принимает метаданные и файлы. Удобнее всего использовать multipart/form-data.
Основные поля: name, package_name, version, category, device_version_id, short_description, description. Ключевые слова сервер может сформировать автоматически. Файлы: icon, app_file, повторяемые screenshots, повторяемые extra_files. Лимит основного файла зависит от выбранной версии устройства из /api/devices.
curl -X POST "http://alldevicestore.ru/api/v3/apps" \ -H "Authorization: Bearer TOKEN" \ -F "name=My App" \ -F "package_name=com.example.app" \ -F "version=1.0" \ -F "category=Утилиты" \ -F "device_version_id=2" \ -F "short_description=Кратко" \ -F "description=Полное описание" \ -F "app_file=@application.jar" \ -F "icon=@icon.png"
PATCH /api/v3/apps/{app_id} использует те же поля. Новые скриншоты и extra_files добавляются к существующим. DELETE скрывает материал, а не обязательно физически удаляет файлы; можно передать reason. POST .../restore восстанавливает материал, если текущему пользователю это разрешено.
Multipart: от 1 до 10 полей archives, каждое содержит ZIP. Ответ — массив результатов по архивам. Полный успех: HTTP 201; частичный: HTTP 207.
Multipart: один archives. Используется для обновления существующего приложения; сервер проверяет связь пакета и права на приложение. При ZIP-обновлении ожидаются метаданные формата AllStore (app.json/update.json согласно странице формата ZIP).
Query: page, per_page (1–100), q, language, version, build, variant, device, midp, cldc, sort.
Сортировки: newest, oldest, version_asc, version_desc, build_asc, build_desc, size_desc.
Возвращает полную запись версии, метаданные, предупреждения, список языков и файлы.
Возвращает языковые варианты и их файлы. У файла доступны метаданные, оригинальное имя, размер, MIME, SHA-256 и download_url.
Три адреса также имеют публичные алиасы без /v3: /api/apps/....
Возвращает установленные языковые пакеты интерфейса, fallback-язык и выбранный язык текущего контекста.
Публичный список с пагинацией. Параметр parent_id: значение ID — ответы указанного комментария; пустой parent_id= — только корневые комментарии. Ответы содержат автора и данные для отображения цепочки.
JSON: text и необязательно parent_id. Сервер проверяет приложение, родительский комментарий и допустимую глубину ответов.
JSON: text, 1–4000 символов. Редактировать можно свой опубликованный комментарий.
Необязательно reason. Фактическое право зависит от автора и роли.
Необязательно reason. Нельзя восстановить комментарий раньше скрытого родительского приложения.
JSON: {"score":5}. Оценка — целое число 1–5. Повторный PUT меняет собственную оценку.
Удаляет собственную оценку.
GET /api/v3/me/favorites — пагинированный список избранного.
PUT /api/v3/me/favorites/{app_id} — добавить; DELETE — удалить.
GET /api/v3/me/apps — приложения текущего автора, включая скрытые; ответ дополнительно содержит status и removal_reason.
Эти маршруты предназначены для настроек/прогресса сторонних клиентов, которые нужно синхронизировать с аккаунтом AllStore.
GET /api/v3/me/client-data — список namespace и лимит. Namespace: 1–64 символа A-Z a-z 0-9 _ . -.
GET /api/v3/me/client-data/{namespace} — получить значение; отсутствующий namespace возвращает пустой объект.
PUT /api/v3/me/client-data/{namespace} — сохранить JSON. Можно передать {"value": ...}; если ключа value нет, сохраняется всё тело. Максимум 64 КБ UTF-8 на namespace.
DELETE /api/v3/me/client-data/{namespace} — удалить.
PUT /api/v3/me/client-data/my.javame.client
Authorization: Bearer TOKEN
Content-Type: application/json
{"value":{"last_page":3,"compact":true}}
GET /api/v3/me/styles — список собственных CSS и active_style_id.
POST /api/v3/me/styles — multipart-поле css_file; валидный стиль сохраняется и становится активным.
PUT /api/v3/me/styles/{style_id} — выбрать стиль. Значение ID 0 используется сервером для отключения личного стиля.
DELETE /api/v3/me/styles/{style_id} — удалить собственный стиль.
JSON: type = user|app|comment, target_id, reason. Сервер проверяет цель и ограничения повторных/самостоятельных жалоб.
Обычный пользователь видит свои обращения, Staff — доступную очередь. Поддерживаются page, per_page, status, type, priority, q, mine=1; для сотрудников также assignment=mine|unassigned.
Возвращает data.report и data.events. Для обычного пользователя служебные поля/внутренние события скрываются.
Workflow использует action: claim, assign, priority, note, resolve, reject, reopen, withdraw. Для конкурентного редактирования передавайте актуальное revision; устаревшая revision даёт HTTP 409. Для назначения применяется assignee_id, для приоритета — priority, для текстовых действий — reason. При resolve сервер также поддерживает санкции, предусмотренные текущим workflow.
Совместимый сокращённый вариант resolve для Staff; тело может содержать параметры решения и reason.
Массовая Staff-операция. Формат строится на том же механизме действий и revision, что и единичная модерация.
Staff-список с пагинацией и фильтрами. Поддерживаются поиск q, фильтры роли/статуса и сортировка, реализованные текущим сервером. Admin/creator получают дополнительные приватные поля; чувствительные секреты не выдаются.
Поля role и/или banned, необязательно reason, рекомендуется revision. Смена роли ограничена иерархией полномочий.
action: warn, note, ban, unban, role, revoke_sessions, reset_password. Передавайте reason; для ban — duration_hours; для role — role; для защиты от гонок — revision. Сброс пароля может вернуть одноразово сгенерированный temporary_password.
Пагинированная история аудита выбранного пользователя, если сотруднику разрешено управлять целью.
Массовые действия для Staff с проверкой полномочий отдельно для каждой цели.
Только creator. limit = 1–1000. Возвращает разобранные последние строки server log.
GET /api/categories — список категорий.
GET /api/devices — иерархия категорий/версий устройств и их ограничения. Используйте ID версии устройства при публикации приложения.
GET /api/languages — языковые пакеты интерфейса.
GET /api/client-info — компактный feature discovery для клиентов.
GET /api/health — service, site_version, состояние SQLite и UTC-время. При проблеме БД возвращает HTTP 503.
GET /api/upload-progress/{job_id} — исторический маршрут прогресса фоновой загрузки из веб-интерфейса. Он сверяет владельца через обычную Flask-сессию и не принимает Bearer как замену сеанса.
Стандартная пагинация v3:
"pagination": {
"page": 1,
"per_page": 25,
"total_items": 123,
"total_pages": 5
}
Даты серверных операций передаются как ISO 8601 UTC. Многострочный пользовательский текст хранится как обычный текст: в JSON новая строка записывается как \n; HTML пользователя не исполняется.
| HTTP | Значение |
|---|---|
| 200 | Успешный запрос. |
| 201 | Объект создан. |
| 207 | ZIP batch выполнен частично: смотрите результаты каждого архива. |
| 400 | Некорректные поля/действие/фильтр. |
| 401 | Нет действующего Bearer-токена или неверные данные входа. |
| 403 | Недостаточно прав, бан или ограничение операции. |
| 404 | Объект не найден/недоступен. |
| 409 | Конфликт уникальности, состояния или устаревшая revision. |
| 413 | Превышен допустимый размер. |
| 429 | Rate limit. |
| 503 | Health check обнаружил проблему сервиса/БД. |
/api/v3.data; при ошибке читайте error.code и error.message.download_url, icon_url, screenshot_urls и URL файлов версии из ответа сервера.per_page, освобождайте поток/соединение сразу после чтения и парсите JSON без создания лишних копий строки.API управления публичными серверами доступен только роли creator.
| Method | Path |
|---|---|
| GET / POST | /api/v3/admin/public-servers |
| GET / PATCH / DELETE | /api/v3/admin/public-servers/{id} |
| POST | /api/v3/admin/public-servers/{id}/action |
| PUT / POST | /api/v3/admin/public-servers/{id}/file |
| GET | /api/v3/admin/public-servers/{id}/log?lines=250 |
Создание и замена server.py используют multipart/form-data с полем server_file.
Действие action принимает start, stop, restart, reallocate_port или clear_log.
PATCH принимает name, description, enabled, autostart, restart_policy, restart_delay, restart_limit, memory_limit_mb, max_processes, max_open_files, max_file_size_mb, storage_limit_mb, max_files, nice_level, request_limit_mb/request_limit_bytes, proxy_timeout и max_concurrent_requests.
Ответ содержит runtime со state, running, pid, port_open, listener_scope и healthy.
Публичный путь проксирует HTTP через AllStore; WebSocket и raw TCP/UDP не поддерживаются этим URL-маршрутом.
Authorization: Bearer <creator-token>
Content-Type: application/json
{"action":"restart"}API совместимости использует /api/v3/devices и /api/v3/apps/{id}/compatibility.
| Method | Path | Назначение |
|---|---|---|
| GET | /api/v3/device-catalog | Платформы, версии и типы характеристик. |
| GET | /api/v3/devices | Конкретные модели; фильтры q, category_id, version_id. |
| GET | /api/v3/devices/{id} | Профиль и характеристики модели. |
| GET | /api/v3/apps/{id}/compatibility?device_id=N | Требования и рассчитанный статус. |
| PUT | /api/v3/apps/{id}/compatibility | Developer/автор, admin или creator: атомарная замена requirements и overrides. |
| GET | /api/v3/apps?device_id=N | Скрывает точно несовместимые приложения и добавляет compatibility в элементы. |
| POST/PATCH/DELETE | /api/v3/admin/device-models... | Creator: управление моделями. |
| POST/PATCH/DELETE | /api/v3/admin/device-categories..., /api/v3/admin/device-versions... | Creator: справочник платформ. |
| POST/DELETE | /api/v3/admin/compatibility-features... | Creator: пользовательские характеристики. |
Оценка намеренно консервативна: отсутствие данных по обязательному требованию даёт possible, а не ложное supported. Ручной override имеет приоритет. Старые поля device, device_category и device_version_id сохранены.