QA Interview Hub · База знань · Тести
API
Клієнт-сервер і REST
Клієнт і сервер: хто за що відповідає
Клієнт просить, сервер вирішує й відповідає. Клієнт — це браузер, мобільний застосунок або Postman. Сервер тримає бізнес-логіку і доступ до бази даних; клієнт ніколи не ходить у базу напряму.
Шлях одного запиту, коли користувач натиснув «Переказати» в банківському застосунку:
- DNS перетворює домен у IP-адресу сервера.
- Встановлюється TCP-з'єднання і TLS-шифрування (HTTPS).
- Клієнт надсилає HTTP-запит:
POST /api/transfers з токеном і JSON-тілом. - Load balancer або API Gateway передає запит одному з інстансів сервера.
- Сервер перевіряє авторизацію, валідує дані, виконує бізнес-логіку: чи вистачає коштів, чи не перевищені ліміти.
- Сервер читає й пише в базу в межах транзакції.
- Сервер повертає відповідь: статус
201, заголовки, JSON з id переказу. - Клієнт показує результат користувачеві.
Для тестувальника важливо, що на кожному кроці може бути своя проблема: DNS чи сертифікат на стенді, балансувальник, що веде на старий інстанс, бізнес-логіка або транзакція, яка записала половину даних. Коли я розумію цей шлях, мені легше локалізувати баг і правильно описати його в репорті.
На співбесіді: Клієнт надсилає HTTP-запит, сервер перевіряє авторизацію, валідує дані, виконує бізнес-логіку, працює з базою в транзакції й повертає відповідь зі статусом. Клієнт у базу напряму не ходить, усе йде через API.
Три думки, які питають на співбесіді
HTTP — stateless. Кожен запит незалежний, сервер не пам'ятає попередній. Тому токен або cookie передають у кожному запиті. Для тестів це означає, що будь-який запит можна відтворити окремо, якщо в нього є всі потрібні заголовки.
Валідація на клієнті — зручність, на сервері — безпека. Форму в UI можна обійти, відправивши запит напряму з Postman або curl. Якщо сервер довіряє лише фронтенду, можна передати від'ємну суму чи чужий id. Саме тому API тестують окремо від UI, а не лише через інтерфейс.
Де шукати баг. Логіка проста:
- Неправильний запит у DevTools — баг фронтенду.
- Правильний запит, але хибна відповідь — баг бекенду.
- Правильна відповідь, але хибне відображення — знову фронтенд.
Цей алгоритм я використовую щодня: відкриваю вкладку Network, знаходжу потрібний запит і дивлюся, на якому етапі дані стали неправильними. Так баг одразу потрапляє правильній команді.
На співбесіді: HTTP stateless, тому авторизація йде в кожному запиті. Серверна валідація обов'язкова, бо клієнт можна обійти, і це головна причина тестувати API окремо від UI.
REST і альтернативи
REST — стиль побудови API, де дані — це ресурси за URL (/users/42), а дії над ними задають HTTP-методами: GET читає, POST створює, PUT і PATCH змінюють, DELETE видаляє. REST stateless, дані зазвичай передаються в JSON, а результат описується статус-кодом.
Альтернативи, які варто знати:
- GraphQL — один ендпоінт, клієнт сам описує, які поля йому потрібні.
- SOAP — XML і суворий контракт (WSDL), часто трапляється в старих банківських системах.
- WebSocket — постійне двостороннє з'єднання, наприклад для котирувань чи чату в реальному часі.
Для QA вибір стилю змінює підхід до тестування. У REST я перевіряю методи, статус-коди й ресурси. У GraphQL статус часто 200 навіть при помилці, і перевіряти треба масив errors у тілі. У SOAP важлива відповідність XML-схемі, а у WebSocket — порядок і доставка повідомлень.
На співбесіді: REST — це стиль API, де дані — ресурси за URL, а дії задають HTTP-методами; він stateless і зазвичай працює з JSON. Якщо проєкт на GraphQL або SOAP, я змінюю підхід до перевірок, але принципи ті самі: контракт, валідація, авторизація.