Корисний ресурс тижня: API From Hell
DOU запускає освітню рубрику: раз на тиждень ділимось ресурсами, які можуть прискорити розвиток у професії і дати реальну практику. Рубрика буде виходити щоп’ятниці.
Ви можете стати частиною процесу: надсилайте нам рекомендації, який саме ресурс виявився для вас корисним. Тож поділіться такими ресурсами зі спільнотою — запропонуйте через гугл-форму, або ж надішліть топік з поміткою «Ресурс тижня» самостійно чи пишіть Каті :)
А тепер — до рекомендації цього тижня!
API From Hell
Цього тижня ділимося ресурсом для практики API-тестування. API From Hell — це спеціально створений API з понад 70 ендпоїнтами, які повертають коректні, дивні або навмисно проблемні HTTP-відповіді. Це зробили, щоб показати, що Postman, Insomnia, Bruno та інші REST-клієнти не завжди відображають відповідь сервера так прозоро, як може здаватися.
Як це працює
Логіка тут така — треба надіслати HTTP-запит на певну адресу, а сервер повертає відповідь. У ній варто дивитися щонайменше на три речі:
- status code — наприклад, 200, 404 або 500;
- headers — службову інформацію про відповідь;
- body — безпосередньо дані, наприклад JSON або XML.
Ресурс навмисно створює ситуації, коли одна з цих частин неправильна, незвична або суперечить іншій. Тож завдання — побачити проблему і перевірити, чи не приховав її REST-клієнт.
Для першої спроби нічого встановлювати не потрібно. Наприклад, можна запустити Basic Client — простий REST-клієнт, який працює прямо в браузері, та послідовно перевірити три GET-запити:
- .../good/json — звичайна коректна JSON-відповідь;
- .../missing-content-type/json — JSON без Content-Type;
- .../malformed/json — сервер повертає 200 OK, але сам JSON містить помилку.
А потім порівняти статус, headers і body та подивитися, чи REST-клієнт показує проблему як є, чи частково «маскує» її форматуванням або власною обробкою.

На сторінці біля кожного прикладу є пояснення, що саме з ним не так і на що варто звернути увагу. Тому вигадувати тестові сценарії з нуля необов’язково, можна просто рухатися сторінкою зверху вниз. Серед прикладів є:
- JSON із синтаксичними помилками;
- дублікати ключів у JSON;
- числа, які клієнт може округлити;
- різниця між полем зі значенням null і повністю відсутнім полем;
- приховані Unicode-символи;
- некоректний XML;
- JSON із заголовком, який стверджує, що це XML, і навпаки;
- 201 Created без Location;
- 302 Found без адреси для перенаправлення;
- 401 Unauthorized без WWW-Authenticate;
- 200 OK із тілом, яке виглядає як повідомлення про помилку.
Наприклад, на ендпоїнті з великим цілим числом можна перевірити, чи не змінив ваш клієнт його значення через втрату точності. А на прикладі з duplicate keys — чи показує інструмент обидва однакові ключі або залишає тільки один із них.
Для кого підійде
Ресурс може бути корисним джунам, які вже знають базові поняття HTTP та хочуть перейти від теорії до практики. Також буде у нагоді тим, хто починає працювати з API. Для першої практики достатньо розуміти, що таке HTTP-запит та відповідь, а також приблизно знати призначення методів на кшталт GET та статус-кодів на кшталт 200. Заглиблюватися в Docker, проксі чи локальний запуск на старті не потрібно.
Кому не підійде
API From Hell не дуже підходить як найперший вступ до API з нуля, оскільки не веде користувача через повноцінний курс із поясненням, що таке REST, endpoint, HTTP method або JSON.
Чим корисно
Основна цінність ресурсу в тому, що він вчить не сприймати результат у REST-клієнті як абсолютну істину, та змушує дивитися глибше — перевіряти raw body, headers, статус-код і порівнювати їх між собою.
Для більш просунутої практики API можна запустити локально. Сервери, проксі та CDN інколи самі змінюють або прибирають навмисно некоректні частини HTTP-відповідей, тому локальний запуск дає змогу перевірити всі сценарії без такого втручання проміжної інфраструктури. На GitHub є реалізації на Node.js, Python і Java, а також варіанти на Express, Flask і Mockoon. Запускати їх можна напряму або через Docker.
Ціна питання
Тренуватися можна безкоштовно. Для роботи з hosted-версією реєструвати акаунт або отримувати API key не потрібно — сторінка дає прямий доступ до ендпоїнтів, Swagger UI та браузерного Basic Client.

Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів