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


REST (Representational State Transfer) – це архітектурний стиль для створення мережевих програм.
API (Application Programming Interface) – інтерфейс, через який різні програми обмінюються даними.
REST API дозволяє клієнту (наприклад, браузеру або програмі) спілкуватися із сервером за допомогою стандартних HTTP-запитів.
Кожен метод визначає, що клієнт хоче зробити:
| Метод | Призначення | Приклад використанн |
|---|---|---|
| GET | Отримати ресурс | Отримати перелік товарів |
| POST | Створити новий ресурс | Створити нове замовлення |
| PUT | Повністю оновити існуючий ресурс | Оновити профіль користувача |
| PATCH | Частково оновити ресурс | Оновити лише email користувача |
| DELETE | Видалити ресурс | Видалити відгук про товар |
Сервер завжди повертає код стану, який говорить про результат обробки запиту:
| Код | Категорія | Значення |
|---|
| 200 | Успіх | OK – запит виконано успішно |
| 201 | Успіх | Created - ресурс успішно створений |
| 204 | Успіх | No Content – запит виконаний, але без тіла відповіді |
| 400 | Помилка клієнта | Bad Request — неправильний запит |
| 401 | Помилка клієнта | Unauthorized - немає авторизації |
| 403 | Помилка клієнта | Forbidden - немає прав на доступ |
| 404 | Помилка клієнта | Not Found - ресурс не знайдений |
| 500 | Ошибка сервера | Internal Server Error - помилка сервера |
Запит складається з кількох частин:
Метод (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
}Повний цикл «Клієнт надсилає запит → Сервер відповідає

Проект для тестування API керування фінансовими транзакціями.
Ви перевірятимете ендпоінти для операцій CRUD, аутентифікації та обробки помилок.
Посилання: https://transactionsmanagerapi.netlify.app/
Transaction Manager — вебзастосунок для керування фінансовими транзакціями
Застосунок надає користувачам можливість:
Створювати, переглядати, редагувати та видаляти транзакції
Слідкувати за поточним станом операцій (в очікуванні, завершені, невдалі)
Відстежувати загальну суму відправлених і отриманих коштів
Використовувати вбудований інтерфейс для тестування API-запитів (REST Tester)
Перш ніж тестувати проєкт, ознайомимось із документацією.
Цей 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: Внутрішня помилка сервера.
Схема даних
| Поле | Тип | Опис | Обов’язкове |
|---|---|---|---|
id | UUID | Унікальний ідентифікатор транзакції | Ні (генерується сервером) |
from_user | UUID | ID користувача-відправника | Ні (заповнюється сервером) |
to_user | String | Email отримувача | Так |
amount | Float | Сума транзакції | Так |
status | String | Статус транзакції (pending, completed) | Так |
created_at | Timestamp | Дата та час створення | Ні (генерується сервером) |
Попередня перевірка API
Перш ніж розпочати тестування API у Postman, ви можете перевірити його роботу безпосередньо на сайті за допомогою вбудованого REST API Tester.
Для цього:
Перейдіть до розділу REST Tester.
Виберіть потрібний метод (наприклад, GET, POST, PATCH, DELETE) та ендпоінт (наприклад, /transactions).
Натисніть кнопку Send Request і перевірте відповідь від сервера.
Це дозволить переконатися, що API працює коректно, перш ніж переходити до тестування у Postman.
Перейдіть до розділу Environments (зліва на панелі).
Натисніть New → Environment.
Дайте назву, наприклад: Supabase.
Додавання змінних
Додайте наступні змінні:
| Змінна | Тип | Поточне значення |
|---|---|---|
apikey | default | eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp... |
access_token | default | залишаємо порожнім |
BASE_URL | default | https://wfeyphieqwpnkkqgyvci.supabase.co |
refresh_token | default | залишаємо порожнім |
expires_at | default | залишаємо порожнім |
user_id | default | залишаємо порожнім |
transaction_id | default | залишаємо порожнім |
Після успішної реєстрації або авторизації (логіну) у відповіді автоматично отримуємо:
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»
}
]
Ціль: Навчитися відправляти GET-запит на отримання однієї транзакції по id.
Ціль: Отримати масив усіх створених транзакцій.
Ціль: Навчитися видаляти транзакції за ID.

Якщо вам потрібна будь-яка підтримка або у вас виникли додаткові питання, не соромтеся зв'язатися з нами, ми готові швидко надати вам допомогу.
Колекція в Postman - це набір API-запитів, згрупованих за змістом. Вона спрощує тестування та автоматизацію роботи з API
Завантажте файл колекції у форматі .json, відкрийте Postman, натисніть Importвиберіть файл та натисніть Open.
Так, після імпорту ви можете змінювати запити, додавати нові, зберігати змінні та ділитися колекцією з колегами.
Після завершення практикуму ви матимете змогу продовжити навчання на поглибленому місячному курсі з REST API