Тренажер API
Чотири формати без бекенду: збери запит проти мок-сервера, прожени HTTP-дриль на методи й статуси, напиши JSONPath-асерт до живої JSON-відповіді та познач schema drift проти OpenAPI. Прогрес зберігається у браузері.
Теорія: розділ API →Замовлення користувача
Отримай список замовлень користувача з id 5.
Довідник API— ресурси, ендпоінти, прикладирозгорнути
Користувачі
/usersGET/users/:id/orders
Замовлення користувача (вкладена колекція)
Path-параметри
idintegerобовʼязково— id користувача
Коди
- 200 OK
- 404 користувача не знайдено
Приклад відповіді
{
"userId": 5,
"orders": [
{
"id": 1001,
"status": "paid",
"total": 980
}
]
}PUT/users/:id
Повна заміна користувача (усі поля)
Path-параметри
idintegerобовʼязково— id користувача
Тіло запиту
namestringобовʼязковоemailstringобовʼязковоrolestringобовʼязково
Коди
- 200 оновлено
- 422 невалідні поля
Приклад відповіді
{
"id": 5,
"name": "Іван",
"email": "ivan@example.com",
"role": "qa"
}GET/users
Список користувачів із фільтром за роллю та пагінацією
Query-параметри
rolestring— фільтр за роллюpageinteger— номер сторінки
Коди
- 200 OK (порожній фільтр → порожній список, не 404)
Приклад відповіді
{
"page": 1,
"perPage": 20,
"total": 34,
"users": [
{
"id": 5,
"name": "Іван",
"email": "ivan@example.com",
"role": "qa"
}
]
}POST/users
Створити користувача
Тіло запиту
namestringобовʼязковоemailstringобовʼязковоrolestring— необовʼязково; за замовч. qa
Коди
- 201 створено, у тілі новий id
- 409 email уже зайнятий
- 422 невалідні поля (напр. email без @)
Приклад відповіді
{
"id": 12,
"name": "Олена",
"email": "olena@example.com",
"role": "qa"
}GET/users/:id
Один користувач за id
Path-параметри
idintegerобовʼязково— id користувача
Коди
- 200 OK
- 404 користувача не знайдено
Приклад відповіді
{
"id": 5,
"name": "Іван",
"email": "ivan@example.com",
"role": "qa"
}Замовлення
/ordersGET/orders
Список замовлень із пагінацією та фільтром
Query-параметри
pageinteger— номер сторінкиstatusstring— фільтр за статусом
Коди
- 200 OK
Приклад відповіді
{
"page": 2,
"perPage": 20,
"total": 57,
"orders": [
{
"id": 1044,
"status": "paid",
"total": 300
}
]
}GET/orders/:id
Одне замовлення за id
Path-параметри
idintegerобовʼязково— id замовлення
Коди
- 200 OK
- 404 не знайдено
Приклад відповіді
{
"id": 1002,
"status": "new",
"total": 250
}PATCH/orders/:id
Часткове оновлення (лише передані поля)
Path-параметри
idintegerобовʼязково— id замовлення
Тіло запиту
statusstring— нове значення статусу
Коди
- 200 оновлено
- 404 не знайдено
Приклад відповіді
{
"id": 1024,
"status": "shipped",
"total": 980
}DELETE/orders/:id
Видалити замовлення (ідемпотентно)
Path-параметри
idintegerобовʼязково— id замовлення
Коди
- 204 видалено, тіла нема
- 404 уже відсутнє
Приклад відповіді
(порожнє тіло)
POST/orders
Створити замовлення з позицій
Тіло запиту
itemsarrayобовʼязково— позиції: productId і qtycommentstring— коментар до замовлення
Коди
- 201 створено, у тілі новий id і сума
- 422 порожній items або невідомий productId
Приклад відповіді
{
"id": 1050,
"status": "new",
"total": 530
}Товари
/productsPOST/products
Створити товар
Тіло запиту
namestringобовʼязковоpricenumberобовʼязково
Коди
- 201 створено, у тілі новий id
- 422 невалідні поля
Приклад відповіді
{
"id": 77,
"name": "Килимок для миші",
"price": 250
}GET/products
Список товарів із фільтром наявності та пагінацією
Query-параметри
inStockboolean— лише ті, що в наявностіpageinteger— номер сторінки
Коди
- 200 OK (без збігів → 200 і порожній масив)
Приклад відповіді
{
"page": 1,
"perPage": 20,
"total": 42,
"products": [
{
"id": 77,
"name": "Килимок для миші",
"price": 250,
"inStock": true
}
]
}GET/products/:id
Один товар за id
Path-параметри
idintegerобовʼязково— id товару
Коди
- 200 OK
- 404 товару не знайдено
Приклад відповіді
{
"id": 77,
"name": "Килимок для миші",
"price": 250,
"inStock": true
}PATCH/products/:id
Часткове оновлення товару (лише передані поля)
Path-параметри
idintegerобовʼязково— id товару
Тіло запиту
pricenumber— нова цінаinStockboolean— нова наявність
Коди
- 200 оновлено
- 404 не знайдено
- 422 невалідне значення (напр. відʼємна ціна)
Приклад відповіді
{
"id": 77,
"name": "Килимок для миші",
"price": 199,
"inStock": true
}DELETE/products/:id
Видалити товар (цілісність: не можна, якщо є в замовленнях)
Path-параметри
idintegerобовʼязково— id товару
Коди
- 204 видалено, тіла нема
- 404 уже відсутній
- 409 товар є в замовленнях — видалення заборонене
Приклад відповіді
(порожнє тіло)
Акаунт
/accountGET/account
Приватний профіль поточного користувача (потрібен токен)
Коди
- 200 OK (з валідним токеном)
- 401 нема/битий токен
- 403 токен є, але бракує прав
Приклад відповіді
{
"id": 5,
"name": "Іван",
"email": "ivan@example.com"
}PATCH/account
Часткове оновлення свого профілю (потрібен токен)
Тіло запиту
namestring— нове імʼяemailstring— новий email
Коди
- 200 оновлено
- 401 нема/битий токен
- 422 невалідний email
Приклад відповіді
{
"id": 5,
"name": "Іван Петренко",
"email": "ivan.petrenko@example.com"
}Відгуки
/products/:id/reviewsGET/products/:id/reviews
Відгуки товару (вкладена колекція)
Path-параметри
idintegerобовʼязково— id товару
Query-параметри
ratinginteger— фільтр за оцінкою 1–5
Коди
- 200 OK (у товару без відгуків — порожній масив)
- 404 товару не знайдено
Приклад відповіді
{
"productId": 77,
"reviews": [
{
"id": 9,
"productId": 77,
"rating": 5,
"text": "Зручний, не ковзає",
"author": "Іван"
}
]
}POST/products/:id/reviews
Додати відгук до товару
Path-параметри
idintegerобовʼязково— id товару
Тіло запиту
ratingintegerобовʼязково— оцінка 1–5textstringобовʼязково— текст відгукуauthorstring— необовʼязково; без нього — «Анонім»
Коди
- 201 створено, у тілі новий id
- 404 товару не знайдено
- 422 rating поза межами 1–5 або порожній text
Приклад відповіді
{
"id": 10,
"productId": 77,
"rating": 4,
"text": "Добрий за свої гроші",
"author": "Олена"
}Купони
/couponsGET/coupons/:code
Купон за кодом (ідентифікатор — не число, а код)
Path-параметри
codestringобовʼязково— код купона, напр. QA10
Коди
- 200 OK
- 404 купона з таким кодом нема
Приклад відповіді
{
"id": 3,
"code": "QA10",
"discount": 10,
"active": true,
"expiresAt": "2026-12-31"
}POST/orders/:id/coupon
Застосувати купон до замовлення
Path-параметри
idintegerобовʼязково— id замовлення
Тіло запиту
codestringобовʼязково— код купона
Коди
- 200 застосовано, у тілі нова сума
- 404 замовлення або купона не знайдено
- 409 купон уже застосований або неактивний
- 422 термін дії купона минув
Приклад відповіді
{
"orderId": 1044,
"code": "QA10",
"discount": 10,
"total": 882
}