Коротко про АРІ та його тестування

У цьому дописі я постараюся зосередити інформацію, яка може стати в нагоді тестувальникам, бажаючим дізнатися, на базовому рівні, що таке API?

API (Application Programming Interface) — це набір готових класів, процедур, функцій, структур і констант, що надаються додатком (бібліотекою, сервісом) для використання в зовнішніх програмних продуктах (Вікіпедія).

Своїми словами, API надає нам можливість використовувати чужі напрацювання в своїх цілях. Отже, застосування API програмістам спрощує створення коду.

Вперше мені довелося зіткнутися з API при розробці додатку прогнозу погоди. Мною був розроблений графічний інтерфейс, а погодні дані підтягувалися у додаток через безкоштовний ключ API Open Weather. API виступає посередником між розробником додатків і будь-яким середовищем, з яким цей додаток повинен взаємодіяти. Образно…. картинка з моєї уяви — це «шланг». «Прикручуєш» його, налаштовуєш, а потім по ньому біжить інформація. Звісно, у кожного API своя мета чи як то краще сказати — бізнес логіка.

Сучасні API часто приймають форму веб-сервісів, які надають користувачам (як людям, так і іншим веб-сервісам) якусь інформацію. Зазвичай ця процедура обміну інформацією і формат передачі даних структуровані, щоб обидві сторони знали, як взаємодіяти між собою.

Формати передачі даних у API

Існує безліч форматів даних, за допомогою яких користувачі взаємодіють з API. Найбільш уживаніші й відомі:

Формат передачі даних XML — жорстко ієрархічно структурований формат передачі даних. Інформація у ньому описується за допомогою простих тегів. Більше бажаєте дізнатися про цей формат передачі даних?,— традиційно зверніться до Вікіпедії. Простий приклад:

та JSON — нескладний, легкий, а значить і більш швидший формат, який виглядає таким чином:

За посиланнями MediaWiki пропонуємо, за бажанням, ознайомитися з іншими API форматами.

Методи HTTP запитів

Зазвичай при зверненні до веб API використовуються запити HTTP. Тому потрібно хоча б коротко сказати про стандартні методи, які можуть міститися в HTTP запиті. Ці методи також називають HTTP дієсловами (Verbs):

  • GET — мабуть, найпопулярний тип запиту. Використовується для отримання або читання даних. Запити з використанням цього методу можуть тільки отримувати дані.
  • HEAD — запрошує ресурс так само, як і метод GET, але без тіла від повіді. Переклад заголовок тут говорить красномовно сам за себе
  • PUT — зазвичай використовується для оновлення ресурсу, шляхом заміни даних запиту.
  • POST — зазвичай використовується для створення нового ресурсу або використовується для відправки сутностей до певного ресурсу. Плюси методу POST очевидні: можна передавати необмежені обсяги інформації, причому, ніхто не побачить цю інформацію після того, як ви її відправили (мається на увазі, в рядку браузера). Якщо не помиляюся, таким чином можна передати пароль, реєстраційні дані з форм тощо.
  • DELETE — видаляє дані.
  • OPTIONS — використовується для опису параметрів з’єднання з ресурсом.
  • PATCH — використовується для часткової зміни ресурсу.
  • та інші.

Хороший туторіал по HTTP на усі випадки життя на developer.mozilla.org

Приклади:

Якщо ми хочемо отримати інформацію про ресурс, URL якого http://www.example.com/customers/12345, ми можемо послати запит:
GET http://www.example.com/customers/12345

Якщо ми хочемо оновити ресурс, ми можемо послати PUT-запит:
PUT http://www.example.com/customers/12345/orders/98765

Звичайні GET запити здатний посилати веб-браузер. Щоб мати змогу надсилати інші типи запитів можуть знадобитися скриптові мови програмування або спеціальні інструменти (про це поговоримо трохи згодом).

HTTP коди відповідей

Сервер може посилати різні коди у відповідь на запити користувачів. Це можуть бути коди помилок або просто коди, що інформують користувачів про стан сервера. Детальний опис ЧИТАТИ:

Найбільш відомі коди — 2xx: OK Success (успішна відповідь від серверу), 4xx (проблеми на стороні клієнта) і 5xx (проблеми на стороні сервера). Про те, які коди повертати в тій чи іншій ситуації, вирішують розробники самих API.

REST API

REST API — це ідеологія побудови API, яка розшифровується як Representational State Transfer API. Вона грунтується на наступних принципах, сформульованих її творцем, Роєм Філдінгом:

  • Клієнт-серверна архітектура
  • Stateless сервер
  • Кешування
  • Багатошарова структура
  • Єдиний інтерфейс
  • Код на вимогу

Не буду заглиблюватися в деталі, хто бажає почитати по темі Вікіпедія.

Аутентифікація по API

Зазвичай для використання API потрібен спеціальний ключ, за допомогою якого сервер дізнається про користувача. API ключ може бути відсутнім або надаватися за запитом (наприклад, після реєстрації на сайті). Наприклад, як у прикладі з погодним сайтом, ключ імпортував мені показники погоди. Ще один приклад, гра у яку ввести API ключ з Facebook здатна імпортувати список друзів.

Інструменти для роботи з API

Вище ми уже згадували: звичайні GET запити можна надсилати за допомогою браузера. Але спеціальні інструменти, які призначені для розробки і тестування API надають можливість не тільки відправляти різні типи запитів, але й зберігати запити, показувати результати в різних форматах, виступати в ролі proxy сервера. І багато багато-багато чого іншого.

Серед таких інструментів:

  • Postman — в тому числі існує в розширенні для Google Chrome, яке в безкоштовній версії дозволяє посилати запити, записувати їх, показувати історію. Доволі зручний і зрозумілий інструмент. Поради тестування API в Postman
  • jMeter — інструмент, який здобув популярність перш за все завдяки інструменту для Perfomance Testing (тестування навантажаження), яке можна проводити з його допомогою. Але це лише одна з безлічі його застосувань.
  • Fiddler — дозволяє переглядати HTTP запити.
  • SoapUI — потужний продукт для розробки і тестування веб додатків.
  • Advanced REST Client — ще одне розширення для Chrome для роботи з API (конструкція запитів, їх показ теж в зручному вигляді).

Тестування API

А тепер — дуже коротко про те, як тестувати API. Звичайно, тут є своя специфіка. Тестування спрямоване на перевірку функціонування перш за все бізнес логіки додатку.

Типові помилки в API:

  • Збій обробки помилкових умов;
  • Невикористані flag
  • Відсутній або дублюється функціонал;
  • Питання налаштування: труднощі при підключенні і отриманні відповіді від API;
  • Проблеми з безпекою API;
  • Питання по багатопоточності;
  • Проблеми з продуктивністю: буває час відгуку API дуже високий;
  • Помилки;
  • Некоректна обробка валідних значень;
  • Дані відповіді некоректно структуровані (JSON або XML).

При тестуванні API потрібно враховувати, що API створюються багато в чому для інтеграції з іншими сервісами. І працюють з ними не люди, а інші програмні системи. Тому потрібно оцінювати API з позиції зручності його використання разом з іншими продуктами, з позиції легкої інтеграції з ними. Кожен API повинен бути гнучким, також мати зрозумілу і детальну документацію.

Але при тестуванні API цілком можна використовувати загальноприйняті техніки тестування ПЗ:

  • Оглядове дослідницьке тестування — тести повинні виконати набір викликів, задекларованих в API, щоб перевірити загальну працездатність системи;
  • Перевірка документації — перевіряється повнота описів функцій API, її зрозумілість і, в свою чергу, є фінальним результатом.
  • Аналіз граничних значень — в API запитах в явному вигляді можуть передаватися значення параметрів. Це відмінний привід виділити кордону вхідних і вихідних значень і перевірити їх.
  • Розбиття на класи еквівалентності — навіть у невеликого API є безліч варіантів використання і безліч комбінацій вхідних і вихідних змінних. Тому ми можемо зайвий раз використовувати наші навички виділення еквівалентних класів.
  • Юзабіліті-тестування — перевіряє, чи є API функціональним і володіє зручним інтерфейсом, також перевіряється інтеграція з іншими;
  • Тестування безпеки — перевіряє використовуваний тип аутентифікації і шифрування даних за допомогою HTTP;
  • Автоматизоване тестування — створення скриптів, програм або настройка додатків, які зможуть тестувати API на регулярній основі;

Як бачите всі види тестування, до яких ми так звикли — функціональне тестування, тестування навантаження, тестування безпеки, юзабіліті, тестування документації — не чужі при тестуванні API теж. В принципі, це й не дивно, оскільки API є повноцінним самостійним продуктом.

Курси та події

Публікації

Відео