
Привіт друзі! Сподіваюсь, ви всі в безпеці.
Вчора мене спитав знайомий колега, а які види API бувають?
І я вирішив трохи позанудствувати та написати дуже розгорнуту відповідь. Перш за все – API, абревіатура Application Programming Interface. Тобто спосіб для програм взаємодіяти між собою. Таких способів є дуже багато, для себе я б виділив низькорівнені та високорівнені.
🤖 До низькорівневих я б відніс ті АПІ, для взаємодії з якими треба вміти програмувати. Наприклад: Win32 API чи Linux Kernel API. Програми, щоб повноцінно функціонувати в цих ОС використовують їх API для взаємодії. Наприклад, дізнаватись інформацію про файли, системний час.
👩💻 До високорівневих АПІ я б відніс ті, з якими можна взаємодіяти за допомогою сторонніх програм. Наприклад, з тими самим REST API можна взаємодіяти за допомогою Postman.
Є кілька підходів до організації високорівневих АПІ:
✅ REST (Representational State Transfer) – архітектурний стиль, що рекомендує для кожної атомарної дії мати власний endpoint та використовувати відповідний метод. наприклад GET /users чи POST /data. Протокол HTTP зазвичай і використовують для імплементації REST API. Формат даних при цьому може бути будь яким: XML, JSON, binary, plain text, csv. Хоча найпопулярніший наразі – JSON
✅ Альтернативно до REST є інший підхід – RPC (Remote Protocol Call) – коли endpoint всього один, і вся взаємодія залежить лише від переданих даних. Яскравий представник підходу – протокол SOAP (що теж працює на протоколі HTTP, хоча це і не є обов’язковою умовою)
✅ GraphQL – ще один підхід до організації АПІ, відмінний від вище зазначених. Хоча теж може використовувати HTTP протокол як транспортний протокол.
✅ Впевнений, є й інші підходи, але вони вже не є такими поширеними
Крім всього цього, високорівнево програми можуть мати API за такими протоколами (з чим особисто я працював) :
✅ HTTP – ті ж REST та SOAP
✅ TCP/UPD sockets
✅ WebSocket – по суті, той же TCP сокет, але з хендшейком через HTTP
✅ JMS (Java Message Service) – цілий стандарт розподіленої доставки повідомлень між ПЗ. (ActiveMQ)
✅ Щось екзотичне типу MQTT (Message Queue Telemetry Transport) – ще один протокол для розподіленої доставки повідомлень
✅ Чи спеціалізоване, наприклад ONVIF (Open Network Video Interface Forum) – відкритий стандарт для обміну повідомлень з IP-камерами спостереження
Фух, багато слів вийшло, але все ще не дуже зрозуміло. Зазвичай, для студентів я пояснюю протоколи на наступному прикладі:
Уявіть, ви живете у 18 сторіччі і інтернету ще не винайшли. Щоб дізнатись новини десь в селі, ви маєте написати листа другу у місто, спитати, що в світі відбувається. Поштова служба – ваш протокол зв’язку, так само, як HTTP – для вашого браузеру зараз.
Протокол – це набір правил. Наприклад, щоб відправити листа, ви ОБОВ’ЯЗКОВО маєте покласти його в конверт, наклеїти марку (з кораблем 🚢) та написати адресу одержувача та відправника. Так само і браузер зобов’язаний відправляти запити на веб сервер в спеціальному форматі.
Далі, щоб листа відправити і отриману бажану інформацією, ви взаємодієте з API поштової служби – це може бути звичайна поштова скринька. Треба підійти та кинути в неї листа. Без взаємодії з цим інтерфейсом, ви не зможете отримати новин. Ті самі дії робить і браузер, спілкуючись з API веб серверу.
Вірте в ЗСУ!
Все буде Україна! 🇺🇦