Ласкаво просимо до практикуму з тестування REST API!

Навчіться тестувати REST API на реальному проекті Transactions Manager за 1 день.

Що таке REST API?

REST (Representational State Transfer) – це архітектурний стиль для створення мережевих програм.

API (Application Programming Interface) – інтерфейс, через який різні програми обмінюються даними.

REST API дозволяє клієнту (наприклад, браузеру або програмі) спілкуватися із сервером за допомогою стандартних HTTP-запитів.

Основні HTTP-методи

Кожен метод визначає, що клієнт хоче зробити:

МетодПризначенняПриклад використанн
GETОтримати ресурсОтримати перелік товарів
POSTСтворити новий ресурсСтворити нове замовлення
PUTПовністю оновити існуючий ресурсОновити профіль користувача
PATCHЧастково оновити ресурсОновити лише email користувача
DELETEВидалити ресурсВидалити відгук про товар

Статус-коди HTTP-відповідей

Сервер завжди повертає код стану, який говорить про результат обробки запиту:

 

КодКатегоріяЗначення
200УспіхOK – запит виконано успішно
201УспіхCreated - ресурс успішно створений
204УспіхNo Content – ​​запит виконаний, але без тіла відповіді
400Помилка клієнтаBad Request — неправильний запит
401Помилка клієнтаUnauthorized - немає авторизації
403Помилка клієнтаForbidden - немає прав на доступ
404Помилка клієнтаNot Found - ресурс не знайдений
500Ошибка сервераInternal Server Error - помилка сервера

Структура HTTP-запиту

Запит складається з кількох частин:

  • Метод (GET, POST тощо)

  • URL (адреса, куди надсилається запит)

  • Заголовки (Headers) — метаінформація (наприклад, Content-Type)

  • Тіло запиту (Body) — дані, що надсилаються на сервер (актуально для POST, PUT, PATCH)

Приклад POST-запиту:

https://api.test.com/products Content-Type: application/json{ "name": "Новий товар", "price": 99.99 }


Структура HTTP-відповіді:

  • Статус-код: наприклад, 201 Created

  • Заголовки: інформація про формат, довжину відповіді тощо

  • Тіло відповіді (Body): дані від сервера у форматі JSON або XML

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

{ "id": 123, "name": "Новий товар", "price": 99.99 }

Повний цикл «Клієнт надсилає запит → Сервер відповідає

Про проект Transactions Manager API

Проект для тестування API керування фінансовими транзакціями.

Ви перевірятимете ендпоінти для операцій CRUD, аутентифікації та обробки помилок.

Посилання: https://transactionsmanagerapi.netlify.app/

Transaction Manager — вебзастосунок для керування фінансовими транзакціями

Застосунок надає користувачам можливість:

  • Створювати, переглядати, редагувати та видаляти транзакції

  • Слідкувати за поточним станом операцій (в очікуванні, завершені, невдалі)

  • Відстежувати загальну суму відправлених і отриманих коштів

  • Використовувати вбудований інтерфейс для тестування API-запитів (REST Tester)

Документація API

Перш ніж тестувати проєкт, ознайомимось із документацією.
Цей API надає функціональність для керування фінансовими транзакціями між користувачами в застосунку. Підтримуються операції створення, отримання, оновлення та видалення транзакцій.

Версія: 1.0.0

Автентифікація
Для доступу до API потрібен API-ключ, який можна отримати в особистому кабінеті після реєстрації користувача. Ключ передається в заголовку Authorization:
Authorization: Bearer [apikey]
Якщо ключ відсутній або недійсний, сервер поверне помилку 401 Unauthorized.

Коди помилок

  • 400 Bad Request: Невірний формат запиту або відсутні обов’язкові параметри.

  • 401 Unauthorized: Відсутній або недійсний API-ключ.

  • 403 Forbidden: Користувач не має достатніх прав для виконання операції.

  • 404 Not Found: Транзакцію з вказаним ID не знайдено.

  • 500 Internal Server Error: Внутрішня помилка сервера.


Схема даних

ПолеТипОписОбов’язкове
idUUIDУнікальний ідентифікатор транзакціїНі (генерується сервером)
from_userUUIDID користувача-відправникаНі (заповнюється сервером)
to_userStringEmail отримувачаТак
amountFloatСума транзакціїТак
statusStringСтатус транзакції (pending, completed)Так
created_atTimestampДата та час створенняНі (генерується сервером)

Попередня перевірка API
Перш ніж розпочати тестування API у Postman, ви можете перевірити його роботу безпосередньо на сайті за допомогою вбудованого REST API Tester.

Для цього:

  1. Перейдіть до розділу REST Tester.

  2. Виберіть потрібний метод (наприклад, GET, POST, PATCH, DELETE) та ендпоінт (наприклад, /transactions).

  3. Натисніть кнопку Send Request і перевірте відповідь від сервера.

Це дозволить переконатися, що API працює коректно, перш ніж переходити до тестування у Postman.

Створення оточення в Postman

Перейдіть до розділу Environments (зліва на панелі).

Натисніть New → Environment.

Дайте назву, наприклад: Supabase.


Додавання змінних

Додайте наступні змінні:

ЗміннаТипПоточне значення
apikeydefaulteyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...
access_tokendefaultзалишаємо порожнім
BASE_URLdefaulthttps://wfeyphieqwpnkkqgyvci.supabase.co
refresh_tokendefaultзалишаємо порожнім
expires_atdefaultзалишаємо порожнім
user_iddefaultзалишаємо порожнім
transaction_iddefaultзалишаємо порожнім

Після успішної реєстрації або авторизації (логіну) у відповіді автоматично отримуємо:

  • access_token

  • refresh_token

  • expires_at

  • user_id


Активувати середовище

У правому верхньому куті виберіть середовище Supabase з випадаючого списку.

Тест-кейс на створення нового користувача

Передумови:

{{BASE_URL}}/auth/v1/signup

Headers:

apikey: {{apikey}} 
Content-Type: application/json



Кроки:

У тілі запиту вкажіть валідні дані:

{

  «email»: «test+user1@gmail.com»,
 «password»: «123456»

}



Очікуваний результат:

Статус відповіді 200 OK.

У відповіді відображається JSON з такими даними:

{
«access_token»: «eyJhbGciOiJIUzI1NiIsI….»,
«token_type»: «bearer»,
«expires_in»: 3600,
«expires_at»: 1746959398,
«refresh_token»: «jNz4FQVNkq2g9MvhFfo5rg»,
«user»: {
«id»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»,
«aud»: «authenticated»,
«role»: «authenticated»,
«email»: «test+user1@gmail.com»,
«email_confirmed_at»: «2025-05-11T09:29:58.085353677Z»,
«phone»: «»,
«last_sign_in_at»: «2025-05-11T09:29:58.09131949Z»,
«app_metadata»: {
«provider»: «email»,
«providers»: [
«email»
]
},
«user_metadata»: {
«email»: «test+user1@gmail.com»,
«email_verified»: true,
«phone_verified»: false,
«sub»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»
},
«identities»: [
{
«identity_id»: «c58c2cb7-11c1-4fa2-8b68-25ed529f0c02»,
«id»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»,
«user_id»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»,
«identity_data»: {
«email»: «test+user1@gmail.com»,
«email_verified»: true,
«phone_verified»: false,
«sub»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»
},
«provider»: «email»,
«last_sign_in_at»: «2025-05-11T09:29:58.072334449Z»,
«created_at»: «2025-05-11T09:29:58.072406Z»,
«updated_at»: «2025-05-11T09:29:58.072406Z»,
«email»: «test+user1@gmail.com»
}
],
«created_at»: «2025-05-11T09:29:58.04943Z»,
«updated_at»: «2025-05-11T09:29:58.099853Z»,
«is_anonymous»: false
}
}


Перейдіть до вкладки Scripts → Post-Response

let json = pm.response.json(); // Перетворюємо відповідь сервера у формат JSON
if (json.access_token) {
pm.environment.set(«access_token», json.access_token); // Зберігаємо access_token
pm.environment.set(«user_id», json.user.id); // Зберігаємо user_id з об’єкта user
}

Тест-кейс на авторизацію під користувачем

Передумови:

{{BASE_URL}}/auth/v1/token?grant_type=password

Headers:

apikey: {{apikey}}
Content-Type: application/json

Кроки:

У тілі запиту вкажіть валідні дані:

{
  «email»: «test+user1@gmail.com»,
  «password»: «123456»
}

Очікуваний результат:

Статус відповіді 200 OK.

У відповіді відображається JSON з такими даними:

{
«access_token»: «eyJhbGciOiJIUzI1NiIsImtpZCI6InArZENUNWlleld6d…»,
«token_type»: «bearer»,
«expires_in»: 3600,
«expires_at»: 1746959398,
«refresh_token»: «jNz4FQVNkq2g9MvhFfo5rg»,
«user»: {
«id»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»,
«aud»: «authenticated»,
«role»: «authenticated»,
«email»: «test+user1@gmail.com»,
«email_confirmed_at»: «2025-05-11T09:29:58.085353677Z»,
«phone»: «»,
«last_sign_in_at»: «2025-05-11T09:29:58.09131949Z»,
«app_metadata»: {
«provider»: «email»,
«providers»: [«email»]
},
«user_metadata»: {
«email»: «test+user1@gmail.com»,
«email_verified»: true,
«phone_verified»: false,
«sub»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»
},
«identities»: [
{
«identity_id»: «c58c2cb7-11c1-4fa2-8b68-25ed529f0c02»,
«id»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»,
«user_id»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»,
«identity_data»: {
«email»: «test+user1@gmail.com»,
«email_verified»: true,
«phone_verified»: false,
«sub»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»
},
«provider»: «email»,
«last_sign_in_at»: «2025-05-11T09:29:58.072334449Z»,
«created_at»: «2025-05-11T09:29:58.072406Z»,
«updated_at»: «2025-05-11T09:29:58.072406Z»,
«email»: «test+user1@gmail.com»
}
],
«created_at»: «2025-05-11T09:29:58.04943Z»,
«updated_at»: «2025-05-11T09:29:58.099853Z»,
«is_anonymous»: false
}
}

Перейдіть до вкладки Scripts → Post-Response

let json = pm.response.json();
pm.environment.set(«access_token», json.access_token);
pm.environment.set(«user_id», json.user.id);
pm.environment.set(«refresh_token», json.refresh_token);
pm.environment.set(«expires_at», String(Date.now() + json.expires_in * 1000));

Тест-кейс на створення транзакції

Назва: Успішне створення транзакції з валідними даними


Передумови:

  • Користувач авторизований (наприклад, test+user1@gmail.com).

  • API-інтерфейс POST /rest/v1/transactions доступний.


HEADERS:

apikey: {{apikey}}
Content-Type: application/json
Authorization: Bearer {{access_token}}
Prefer: return=representation

Кроки:

У тілі запиту вказати валідні дані:

{
  «from_user»: «{{user_id}}»,
  «to_user»: «recipient@test.com»,
  «amount»: 10.5,
  «status»: «pending»
}

Очікуваний результат:

  • Статус відповіді: 201 Created.

  • У відповіді повертається JSON з такими даними:

    • згенерованим id,

    • коректним from_user (поточний користувач),

    • полем to_user зі значенням "recipient@test.com",

    • полем amount зі значенням 10.5,

    • полем status зі значенням "pending",

    • полем created_at з актуальною міткою часу.


Перейдіть на вкладку Scripts → Post-Response

const response = pm.response.json();
pm.environment.set(«transaction_id», response[0].id);

Пояснення до кожного рядка:

const response = pm.response.json();

Цей рядок перетворює відповідь від сервера (зазвичай у форматі JSON) у JavaScript-об’єкт і зберігає його у змінну response.

Якщо сервер повертає масив об’єктів, response буде масивом.

pm.environment.set(«transaction_id», response[0].id);

З цього масиву береться перший об’єкт response[0], і з нього — значення поля id.

Потім це значення зберігається в змінну середовища transaction_id, щоб можна було використовувати її в інших запитах як {{transaction_id}}.

Тест-кейс на редагування транзакції

Назва: Успішне оновлення наявної транзакції


Передумови:

  • Користувач авторизований.

  • У системі вже існує транзакція з певним id.

  • API /rest/v1/transactions?id=eq.{{transaction_id}} підтримує метод PATCH.

HEADERS:

apikey: {{apikey}}
Content-Type: application/json
Authorization: Bearer {{access_token}}
Prefer: return=representation

Кроки:

У тілі запиту вказати валідні дані:

{
  «from_user»: «{{user_id}}»,
  «to_user»: «recipient@test.com»,
  «amount»: 11.5,
  «status»: «completed»
}

Очікуваний результат:

  • Статус відповіді: 200 OK.

  • У відповіді повертається JSON із такими даними:

[
    {
        «id»: «f7797fee-24c3-4578-ace1-8db281a9bb4d»,
        «from_user»: «43830d10-1c91-46f7-aaa7-573afc0b8fa5»,
        «to_user»: «recipient@test.com»,
        «amount»: 11.5,
        «status»: «completed»,
        «created_at»: «2025-05-11T10:02:40.654397+00:00»
    }
]

Ви можете завантажити колекцію у форматі JSON та імпортувати її до Postman.

Завдання для самостійної роботи

Отримання транзакції за ID

Ціль: Навчитися відправляти GET-запит на отримання однієї транзакції по id.

Отримання списку всіх транзакцій

Ціль: Отримати масив усіх створених транзакцій.

Видалення транзакції

Ціль: Навчитися видаляти транзакції за ID.

Більше тест-кейсів зі створення/редагування транзакцій

Підтримка та питання

Якщо вам потрібна будь-яка підтримка або у вас виникли додаткові питання, не соромтеся зв'язатися з нами, ми готові швидко надати вам допомогу.

Через чат-бот

Поширені запитання

Колекція в Postman - це набір API-запитів, згрупованих за змістом. Вона спрощує тестування та автоматизацію роботи з API

Завантажте файл колекції у форматі .json, відкрийте Postman, натисніть Importвиберіть файл та натисніть Open.

Так, після імпорту ви можете змінювати запити, додавати нові, зберігати змінні та ділитися колекцією з колегами.

Після завершення практикуму ви матимете змогу продовжити навчання на поглибленому місячному курсі з REST API