Інтерфейси Прикладного Програмування (API): Основи та Інтерв’ю
API (Application Programming Interface) – це, по суті, інтерфейс, який дозволяє різним програмним продуктам взаємодіяти між собою. Він є своєрідним мостом, що дає змогу одній програмі використовувати ресурси іншої.
Ключова перевага застосування API полягає в тому, що вони надають доступ до даних лише через визначені канали. Це означає, що сторонні програми не отримують повного доступу до всіх даних, а лише до тієї їх частини, яку ви самі вирішили відкрити через API.
У взаємодії через API, програма або користувач, що запитує дані, іменується клієнтом, а програма, що надає ці дані, – сервером.
Сьогодні API є невід’ємною частиною практично будь-якої програмної архітектури. Якщо ви претендуєте на посаду фронтенд, бекенд, фулстек розробника або мережевого інженера, то знання про API буде важливим аспектом співбесіди.
Враховуючи це, давайте розглянемо декілька типових питань щодо REST API, які можуть виникнути на співбесідах.
Що таке REST?
REST (Representational State Transfer) – це архітектурний стиль, який встановлює певні обмеження на те, як має працювати API. API, що розроблені відповідно до цих принципів, називаються RESTful API.
Важливо зазначити, що REST не є протоколом чи стандартом, а радше архітектурним підходом, який можна реалізувати різними способами. Він надає розробникам значну свободу та гнучкість, тому його часто використовують для створення API. Основні принципи архітектури REST включають:
- Розділення клієнта та сервера: Клієнт RESTful API взаємодіє з сервером виключно шляхом запиту даних через URI (уніфікований ідентифікатор ресурсу). Сервер, у свою чергу, не повинен вносити жодних змін до інтерфейсу клієнта.
- Відсутність стану: Кожен запит є незалежним і не залежить від попередніх. Запити не мають стану, і сервер не відстежує попередні дії. Після виконання запит просто завершується, і кожен запит обробляється окремо.
- Багаторівнева архітектура: Клієнт або сервер не має значення, чи запит йде безпосередньо до джерела або через проміжну програму. Важлива тільки відповідь на запит.
- Кешування: Дані або відповіді можуть кешуватися як на боці клієнта, так і на сервері. Це підвищує продуктивність і масштабованість, дозволяючи повторно використовувати відповіді на часті запити без додаткового навантаження на сервер.
Які ключові особливості REST?
Основні характеристики REST:
- Гнучкість: REST API не прив’язані до конкретного сервера. Ви можете легко переходити між серверами, і це не змінить спосіб відповіді API. Крім того, можна додавати різні кінцеві точки для різних видів даних.
- Масштабованість: Кешування значно покращує масштабованість, оскільки відповіді зберігаються і можуть використовуватися повторно. Це зменшує навантаження на сервер і знижує затримки.
- Авторизація: За допомогою спеціального заголовка авторизації ви можете надавати облікові дані, які сервер використовує для перевірки прав доступу до ресурсу.
- Відсутність стану: Це ключова характеристика REST, яка гарантує, що запити не залежать один від одного. Кожен запит обробляється ізольовано і завершується після виконання.
Що таке ресурси в архітектурі REST?
Ресурси в REST – це сутності, над якими можна виконувати різні операції, такі як отримання, оновлення чи видалення. Вони є основними будівельними блоками архітектури REST.
Наприклад, в інтернет-магазині ресурсами можуть бути продукти, користувачі та метадані, оскільки всі вони піддаються управлінню та можуть передаватися між програмами через API.
Переваги та недоліки REST API
Переваги REST API:
- Легкість в реалізації.
- Просте управління ресурсами.
- Масштабованість завдяки клієнт-серверній архітектурі.
- Підтримка різних форматів даних, таких як XML і JSON.
Недоліки:
- Не підтримується стан між запитами.
- Складно визначити фактичне джерело ресурсу через багаторівневу структуру.
- Не завжди підходить для складних транзакцій або запитів.
Що таке REST шаблон?
REST шаблон – це інструмент або клієнт, що дозволяє звертатися до REST API у framework Spring. Він спрощує написання коду, необхідного для запиту ресурсів з API, приховуючи рутинні операції.
Що означає RESTful?
RESTful API або служби – це інтерфейси, що реалізують архітектурний стиль REST (Representational State Transfer) і використовують протоколи, такі як HTTP.
Що таке веб-служби RESTful?
Веб-служби RESTful створюються для оптимальної роботи в мережі Інтернет. Вони використовують архітектурний стиль REST, який накладає певні обмеження, такі як єдиний інтерфейс, багаторівнева архітектура та відсутність стану. Це забезпечує їхню продуктивність і масштабованість.
Як тестувати веб-сервіси RESTful?
Для тестування веб-сервісів RESTful можна використовувати REST-клієнти, такі як Postman або Thunder Client. Запитуйте потрібні веб-сервіси і аналізуйте відповіді. Це ключовий момент тестування.
При тестуванні складних API, розбивайте процес на модульне, інтеграційне, продуктивнісне та наскрізне тестування.
Особливості веб-служб RESTful
Основні особливості:
- Підтримка різних форматів, таких як JSON і XML.
- Масштабованість
- Ізоляція клієнта і сервера
- Гнучкість
Визначення класів кореневих ресурсів RESTful
Класи кореневих ресурсів – це звичайні Java об’єкти (POJO), анотовані @Path або мають хоча б один метод з анотацією @Path або методом запиту, наприклад @GET, @POST, @PUT або @DELETE.
Що таке URI?
URI (Uniform Resource Identifier) – це послідовність символів, яка використовується для пошуку або ідентифікації ресурсів API. Він ідентифікує ресурс за ім’ям або розташуванням, не залежачи від конкретного методу.
Що таке відсутність стану в REST?
Відсутність стану означає, що запити є незалежними, і сервер не зберігає жодної інформації про попередні запити. Кожен запит обробляється як окрема одиниця.
Що таке JAX-RS?
JAX-RS – це Java API, що дозволяє розробляти REST програми на Java. Він спрощує процес створення REST API в Java.
Ключові анотації в JAX-RS API
Анотації в JAX-RS використовуються для визначення класів Java як ресурсів і їхніх методів. Ключові анотації:
- @GET: для запитів GET HTTP.
- @POST: для запитів POST HTTP.
- @Path: шлях до Java класу.
- @QueryParam: параметри запиту URI.
Основні функції JAX-RS API
Особливості JAX-RS:
- Кешування на стороні клієнта.
- Кешування на стороні сервера.
- Налаштування рядка запиту.
- Анотації під час виконання.
Як налаштувати програми JAX-RS?
Програма JAX-RS складається з одного або більше ресурсних класів, упакованих у WAR файл. Базовий URI можна налаштувати двома способами:
- За допомогою анотації @ApplicationPath в підкласі javax.ws.rs.core.Application.
- За допомогою тега servlet-mapping у дескрипторі розгортання web.xml.
Що таке JAX-WS і JAX-RS?
JAX-WS (XML Web Services API) використовується для створення API з протоколом SOAP, тоді як JAX-RS використовується для створення веб-сервісів з архітектурою REST.
Що таке коди стану HTTP?
Коди стану HTTP – це спосіб передачі статусу відповіді сервера клієнту. Вони містяться в заголовках відповіді сервера.
Клієнт використовує коди стану для ідентифікації успішних або невдалих запитів.
Поширені коди стану:
- 200 – OK (запит успішний).
- 404 – Not Found (ресурс не знайдено).
- 500 – Internal Server Error (внутрішня помилка сервера).
- 503 – Service Unavailable (сервіс тимчасово недоступний).
Що таке методи HTTP?
Методи HTTP визначають тип дії, яку необхідно виконати над ресурсом API. Наприклад, метод GET використовується для отримання списку фільмів, а POST – для оновлення даних.
Основні методи HTTP:
- GET: отримання даних.
- POST: оновлення ресурсу.
- DELETE: видалення ресурсу.
- PATCH: часткове оновлення ресурсу.
Як працює базова аутентифікація HTTP?
Аутентифікація перевіряє автентичність клієнта для забезпечення безпеки даних. Вона працює через заголовок авторизації, де клієнт передає ім’я користувача і пароль.
Важливо використовувати HTTPS замість HTTP для передачі облікових даних, оскільки HTTPS шифрує трафік.
Основні компоненти HTTP-запиту
Компоненти HTTP-запиту:
- Рядок запиту (метод, шлях, версія HTTP).
- Заголовки (метадані запиту).
- Тіло (опційно, для деяких методів, наприклад POST).
Основні компоненти HTTP-відповіді
Компоненти HTTP-відповіді:
- Статус (код статусу).
- Заголовки (інформація про відповідь).
- Повідомлення (фактичні дані).
Різниця між REST і AJAX
AJAX є клієнтом для доступу до RESTful API. REST – це архітектура для створення RESTful API. AJAX використовує JavaScript для асинхронних запитів, тоді як REST є архітектурним підходом.
Різниця між SOAP і REST
REST – це архітектура з мінімальними обмеженнями, а SOAP (Simple Object Access Protocol) – це протокол з суворими вимогами. REST є більш гнучким, швидким і легким, тоді як SOAP має вбудовану безпеку, але є складнішим у використанні. SOAP використовує XML, а REST – різні формати даних.
Різниця між PUT і POST
POST надсилає дані на сервер, і повторні запити можуть мати побічні ефекти. PUT оновлює ресурс на сервері, але тільки один раз. Якщо ресурс не існує, PUT створить новий, а POST додасть ще одну копію. PUT є ідемпотентним, а POST – ні.
Що таке корисне навантаження?
Корисне навантаження в REST API – це тіло запиту, дані, які клієнт надсилає на сервер для обробки.
Максимальний розмір корисного навантаження в POST
Немає обмежень за замовчуванням в HTTP. Обмеження залежать від налаштувань клієнта чи сервера.
Рекомендації зі створення URI
Рекомендації:
- Уникайте розширень файлів.
- Будьте послідовними з усіма URI.
- Розділяйте URI на домени та субдомени.
- Використовуйте дефіси або підкреслення для розділення слів.
- Використовуйте косу риску для ієрархії ресурсів.
- Кодуйте URI.
- Робіть URI зручним для читання.
Що таке ідемпотентні методи?
Ідемпотентні методи HTTP однаково впливають на сервер, незалежно від кількості ідентичних запитів. Наприклад, DELETE видалить ресурс тільки один раз, незважаючи на повторні запити.
Ідемпотентні методи:
- PUT
- DELETE
- GET
- HEAD
- OPTIONS
Що таке Postman?
Postman – це інструмент для розробки, тестування та модифікації API. Він надає можливості для швидкого створення та тестування API без необхідності налаштування клієнта.
Заголовок Cache-Control містить директиви для керування кешуванням у браузерах і серверах. Він визначає, що кешувати і як довго.
Директиви Cache-Control:
- max-age
- no-cache
- private
- public
- no-store
- immutable
Визначення обміну повідомленнями у веб-службах RESTful
Обмін повідомленнями – це зв’язок між клієнтом і сервером, де клієнт надсилає HTTP-запит, а сервер відповідає HTTP-відповіддю.
Різниця між монолітною, SOA і мікросервісною архітектурою
У монолітній архітектурі все керується в одному місці. SOA (сервіс-орієнтована архітектура) – це комбінація декількох служб. Мікросервіси – це незалежні програми, що спілкуються через API. Мікросервіси забезпечують більшу гнучкість і масштабованість, ніж монолітні і SOA.
Як працює мікросервісна архітектура?
У мікросервісній архітектурі програми розділені на незалежні підрозділи, що спілкуються через API. Це забезпечує гнучкість, масштабованість і незалежність технологій.
Що таке CRUD?
CRUD (Create, Read, Update, Delete) – це операції, які виконуються над ресурсом. API, що підтримує ці операції, є CRUD API.
Що таке кешування?
Кешування – це техніка зберігання запитів або відповідей для повторного використання. Відповіді часто кешуються на клієнті, щоб уникнути повторних запитів.
Що робить @RequestMapping?
@RequestMapping – це анотація у Spring, яка використовується для відображення веб-запитів на певні методи обробника.
Що робить @PathVariable?
@PathVariable – це анотація у Spring, яка використовується для вилучення значення змінних шаблону та призначення їх змінній методу.
Визначення HttpMessageConverter
HttpMessageConverter перетворює HTTP-запит (або його частини) в тип, потрібний для методу обробника, або навпаки, щоб створити HTTP-відповідь.
Інструменти для тестування API:
- Postman
- SoapUI
- RestSharp
- Katalon
- ReadyAPI
- Apigee
Заключні слова
API є дуже популярними, зокрема REST API, оскільки вони легкі у розробці та використанні.
Підготуйтеся до співбесіди, вивчивши наведені вище питання про REST API. Для подальшого навчання ви можете ознайомитися з матеріалами про скрапінг веб-сайтів за допомогою API.