/practice/api-sandbox — песочница для HTTP-сценариев. Это учебный REST API со статус-кодами, CRUD, авторизацией, идемпотентностью, ограничением частоты запросов, кэшем, GraphQL и загрузкой файлов. Запросы можно отправлять прямо со страницы или из любого внешнего клиента: Postman, Bruno, curl. Песочница входит в бесплатную часть платформы.
Адрес
Все эндпоинты лежат под /api/practice/.... Пример полного адреса:
https://tomiddle.com/api/practice/users
В примерах curl ниже домен опущен — подставьте его сами.
Вкладки
1. Статусы и ответы
Эндпоинт возвращает тот статус, тело и задержку, которые вы попросите.
curl -i "/api/practice/status?code=200"
curl -i "/api/practice/status?code=404&body=Not%20Found"
curl -i "/api/practice/status?code=500"
2. CRUD: users
Полный жизненный цикл пользователя: список с пагинацией (search, page, limit, sort, order, общее число — в заголовке X-Total-Count), чтение, создание, полная замена, частичное изменение, удаление.
curl /api/practice/users # GET — список
curl /api/practice/users/1 # GET — один (404, если нет)
curl -X POST /api/practice/users \
-H "Content-Type: application/json" \
-d '{"email":"a@b.c","name":"A","age":30}' # POST — 201 и заголовок Location
curl -X PUT /api/practice/users/1 ... # PUT — все поля, иначе 422
curl -X PATCH /api/practice/users/1 ... # PATCH — одно или несколько полей
curl -X DELETE /api/practice/users/1 # DELETE — 204 без тела
3. CRUD: products
То же для товаров, с фильтрами search, category (electronics, merch, books, other) и inStock. Категория не из списка — 400.
4. Авторизация
Сначала регистрация, потом вход и запрос с токеном.
# 1. Регистрация (пароль от 8 символов, иначе 400; занятый email — 409)
curl -X POST /api/practice/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"qa@example.com","password":"password123"}'
# 2. Вход — в ответе token
curl -X POST /api/practice/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"qa@example.com","password":"password123"}'
# → { "token": "test-…", "tokenType": "Bearer", ... }
# 3. Запрос с токеном
curl /api/practice/auth/me \
-H "Authorization: Bearer test-…"
Без токена, с неизвестным или устаревшим токеном — 401.
5. Идемпотентность
POST /api/practice/payments с заголовком Idempotency-Key: повтор с тем же ключом возвращает тот же платёж и заголовок Idempotent-Replayed: true. Без ключа каждый запрос создаёт новый платёж.
curl -X POST /api/practice/payments \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-key-1" \
-d '{"amount":100,"currency":"RUB","recipient":"shop"}'
6. Rate limit
Не больше 5 запросов за 10 секунд. Дальше — 429 Too Many Requests с заголовком Retry-After. В каждом ответе есть X-RateLimit-Remaining.
for i in {1..8}; do curl -i /api/practice/limited; done
7. Кэш
Эндпоинт отдаёт ETag. Повторный запрос с If-None-Match получает 304 Not Modified без тела.
curl -i /api/practice/cached
# → ETag: "abc"
curl -i /api/practice/cached -H 'If-None-Match: "abc"'
# → 304 Not Modified
8. Ошибки
/api/practice/errors/:type — разные виды сбоев: пустое тело при 500, HTML вместо JSON, битый JSON, 502, 503 с Retry-After, медленный ответ, таймаут, неверный Content-Type, цикл редиректов, 418. Учит не доверять заголовку Content-Type и разбирать ответ осторожно.
9. Payload
/api/practice/payload/:size — ответ заданного размера, до 10 МБ. Заголовок Content-Length и поле actualBytesApprox показывают, сколько пришло на самом деле.
10. Webhook
Вы указываете адрес, и сервер отправляет на него POST с телом {hello, at} и заголовком X-Practice-Event. Удобно проверять через webhook.site.
11. GraphQL
POST /api/practice/graphql — упрощённый GraphQL с тремя корневыми полями: users, user(id), products. Ответ всегда со статусом 200 в формате {data, errors?}.
curl -X POST /api/practice/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{ users { id email } }"}'
12. Загрузка файлов
multipart/form-data, поле file. Лимит — 5 МБ. Разрешены PNG, JPEG, GIF, WebP, PDF, простой текст и JSON.
curl -X POST /api/practice/upload \
-F "file=@./image.png"
13. Квиз
12 вопросов по сценариям выше: статусы, заголовки, методы, CORS, идемпотентность, кэш.
Как пользоваться
В браузере откройте /practice/api-sandbox, выберите вкладку, заполните поля и отправьте запрос — ответ появится ниже.
Снаружи — скопируйте запрос в curl или Postman. Эндпоинты те же, заглушек для внешних клиентов нет.
Что важно
- Все данные в песочнице учебные. Не вводите туда настоящие пароли и личные данные.
- Данные общие и временные. Их видят все, кто работает с песочницей, а при перезапуске сервера они возвращаются к исходному состоянию.
- Не используйте песочницу для нагрузочных тестов. Она не рассчитана на тысячи запросов в секунду, и из-за вас она перестанет отвечать остальным.