Учебные API академии

Копии открытых сервисов для курсов: тот же формат ответа, но на сервере академии в России. Ключ и регистрация не нужны. Одинаковый запрос получает одинаковый ответ.

JSONPlaceholder /jsonplaceholder

Учебный REST API с постами, комментариями, альбомами, пользователями и задачами. Данные те же, что у оригинала. POST, PUT, PATCH и DELETE отвечают как настоящие, но ничего не сохраняют.

Настоящий сервис: https://jsonplaceholder.typicode.com. Путь после префикса тот же, что у него.

Open Library — поиск книг /openlibrary

Поиск книг по названию и автору: /search.json с параметрами q, title, author, fields, limit, offset. Каталог учебный: несколько десятков книг, в том числе те, что ищет демо курса NextJS.

Настоящий сервис: https://openlibrary.org. Путь после префикса тот же, что у него.

Open-Meteo — погода и геокодер /open-meteo

Прогноз /v1/forecast (current, hourly, daily, forecast_days, past_days, timezone, единицы измерения) и геокодер /geocoding/v1/search (name, count, language, format). Погода учебная: правдоподобная, но выдуманная; в один и тот же час одинаковый запрос получает одинаковый ответ.

Настоящий сервис: https://api.open-meteo.com и https://geocoding-api.open-meteo.com. Путь после префикса тот же, что у него.

ExchangeRate-API — курсы валют /er-api

Курсы валют к выбранной базовой: /v6/latest/USD, /v6/latest/EUR, /v6/latest/RUB. Курсы учебные, обновляются раз в сутки.

Настоящий сервис: https://open.er-api.com. Путь после префикса тот же, что у него.

Языковая модель в формате OpenAI /llm

Chat Completions: POST /v1/chat/completions (stream, tools, response_format, max_tokens) и GET /v1/models. Ключ обязателен: Authorization: Bearer sk-academy-… — подойдёт любой с этим началом. Модели за копией нет: ответ — заготовленный текст с началом вопроса, но ключ, usage, поток и ошибки как у настоящего провайдера.

Настоящий сервис: любой провайдер с OpenAI-совместимым API: api.openai.com, api.deepseek.com и другие. Путь после префикса тот же, что у него.

GitHub — вход через OAuth /oauth/github

Вход через GitHub в раскладке GitHub Enterprise: /login/oauth/authorize, /login/oauth/access_token, /api/v3/user и /api/v3/user/emails. Вместо пароля — страница выбора учебного пользователя; redirect_uri принимается только на localhost.

Настоящий сервис: https://github.com и https://api.github.com. Раскладка GitHub Enterprise: вход — те же /login/oauth/…, что у github.com, API — под /api/v3.

Google — вход через OAuth и OpenID Connect /oauth/google

Вход через Google: discovery, /o/oauth2/v2/auth, /token, /v1/userinfo (и /oauth2/v3/userinfo), /oauth2/v3/certs. id_token подписан RS256, issuer — адрес этой копии. Вместо пароля — страница выбора учебного пользователя; redirect_uri принимается только на localhost.

Настоящий сервис: https://accounts.google.com, https://oauth2.googleapis.com и https://www.googleapis.com. Адреса Google с разных доменов собраны под одним префиксом, путь после него — тот же, что у Google.

placehold.co — заглушка с размером /placehold

Серый прямоугольник с подписью размера в SVG: /600x400, /48, /600x400/orange/white, ?text=Привет. Растровые форматы копия не отдаёт.

Настоящий сервис: https://placehold.co. Путь после префикса тот же, что у него; формат — только SVG.

Lorem Picsum — картинки-заглушки /picsum

Картинка нужного размера в JPEG: /800/600, /id/10/800/600, /seed/кофе/400/300, параметры ?grayscale и ?blur=1…10. Одинаковый адрес — одинаковая картинка.

Настоящий сервис: https://picsum.photos. Путь после префикса тот же, что у него; вместо фотографий — нарисованные пейзажи, ответ в JPEG без перенаправления.

Файлы моделей /files

Зеркало моделей, которые курсы скачивают целиком. Путь /files/mediapipe-models/… повторяет путь в storage.googleapis.com/mediapipe-models/…. Докачка работает: сервер отвечает на Range. Контрольные суммы — /files/SHA256SUMS. Файлы отдаёт сервер академии, при локальном запуске копии их нет.

/files/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite18,6 МБ, Apache-2.0
Mobile_AI M04, M07, M08, M10–M12
/files/mediapipe-models/image_classifier/efficientnet_lite0/int8/1/efficientnet_lite0.tflite5,4 МБ, Apache-2.0
Mobile_AI M04, M11 (проверочный файл докачки), M12
/files/mediapipe-models/language_detector/language_detector/float32/1/language_detector.tflite0,3 МБ, Apache-2.0
Mobile_AI M09
/files/models/qwen2.5-0.5b-instruct.zip999,6 МБ, Apache-2.0
Applied_ML M15

Отказы по заказу

Чтобы проверить обработку ошибок, вставьте после префикса API сегмент /_fault/вид. Код программы менять не нужно — только базовый адрес.

/_fault/503ответ с этим кодом: подойдёт любой от 200 до 599, кроме 3xx; у 204 тела нет, у 429 и 503 есть заголовок Retry-After
/_fault/429-2то же для 429 и 503, но Retry-After — заданное число секунд: так видны повторы с паузой
/_fault/timeoutсервис принимает запрос и молчит 60 секунд
/_fault/slow-2000обычный ответ с задержкой в миллисекундах, не больше 30 000
/_fault/garbageкод 200 и обрезанный JSON
/_fault/resetсоединение рвётся без ответа

Пример: /open-meteo/_fault/503/v1/forecast?latitude=55&longitude=73

Служебное

/health — проверка доступности, /version — версия сервиса.