vyvchy
    ← Тренажери

    Тренажер API

    Чотири формати без бекенду: збери запит проти мок-сервера, прожени HTTP-дриль на методи й статуси, напиши JSONPath-асерт до живої JSON-відповіді та познач schema drift проти OpenAPI. Прогрес зберігається у браузері.

    Теорія: розділ API →
    Рівень 1 з 100Побудуй запитзапитилегко

    Замовлення користувача

    Отримай список замовлень користувача з id 5.

    Довідник API— ресурси, ендпоінти, прикладирозгорнути

    Користувачі

    /users
    GET/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"
    }

    Замовлення

    /orders
    GET/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 і qty
    • commentstringкоментар до замовлення

    Коди

    • 201 створено, у тілі новий id і сума
    • 422 порожній items або невідомий productId

    Приклад відповіді

    {
      "id": 1050,
      "status": "new",
      "total": 530
    }

    Товари

    /products
    POST/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 товар є в замовленнях — видалення заборонене

    Приклад відповіді

    (порожнє тіло)

    Акаунт

    /account
    GET/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/reviews
    GET/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–5
    • textstringобовʼязковотекст відгуку
    • authorstringнеобовʼязково; без нього — «Анонім»

    Коди

    • 201 створено, у тілі новий id
    • 404 товару не знайдено
    • 422 rating поза межами 1–5 або порожній text

    Приклад відповіді

    {
      "id": 10,
      "productId": 77,
      "rating": 4,
      "text": "Добрий за свої гроші",
      "author": "Олена"
    }

    Купони

    /coupons
    GET/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
    }