Первая статья цикла: Зачем нужен бэкенд и фронтенд
В широком смысле API – это вид интерфейса и расшифровывается как "программный интерфейс приложения" (Application Programming Interface).
Что мы подразумеваем под словом интерфейс?
Пользовательский интерфейс
Что такое пользовательский интерфейс, понимаю все, так как постоянно его используют. Пользователь открывает приложение и как-то с ним взаимодействует, какие базы данных есть в приложении, как рассчитываются те или иные характеристики внутри приложения, не очень интересно, ведь есть некоторая прослойка – пользовательский интерфейс, с красивыми и понятными кнопками и формами ввода.
Человек-программа
Пример:
Представьте себе приложение маркетплейса: множество товаров с описанием, наша собственная корзина, время доставки товара – все это представляется пользователю "на его языке" понятным и красивым образом. А как эти данные хранит само приложение? Наверняка там есть база данных со множество таблиц, нас будут интересовать три: товары, пользователи, заказы. В упрощенном виде это будет выглядеть вот так:
Программа, например, высчитывает каждый раз время доставки, по гео-данным товара и пользователя. Только представьте сколько еще данных надо было бы хранить, если бы создавалась запись для каждой пары пользователь:товар. Заказ из корзины пользователя так же записывается в таблицу заказов, в этой записи мы ссылаемся на id товаров из одной таблицы и на id пользователей из другой. С точки зрения работы программы – это удобно, а вот пользователю это представляется совсем по-другому.
Программа-программа
На примере пользовательского интерфейса, мы разобрались в целом со словом интерфейс – это некоторая прослойка для взаимодействия чего-бы то ни было: человек-программа, программа-программа, даже человек-человек.
Осталось разобраться с программным видом интерфейсов. Большое приложение состоит из множества компонент, модулей, сервисов, одним словом – почти самостоятельных частей. Например, бэкенд и фронтенд. А может быть еще отдельный сервис приложения, который отправляет e-mail сообщения или модуль программы, для распознавания людей в кадре. Т.е. таких частей может быть много, у них есть какие-то функциональные задачи и эти части программы должны между собой как-то общаться – обмениваться информацией.
Пример:
API
Функциональные части программы общаются между собой с помощью API. Таких интерфейсов существует множество, но базовые принципы у них одинаковые. Поэтому, мы будем разбираться на примере API взаимодействия фронтенда и бэкенда, так как без него не обходится вообще ни одно web-приложение. Ключевая особенность заключается в том, что части web-приложения разнесены географически: браузеры пользователей на их устройствах и сервер (или много серверов) приложения. Это значит, что фронтенд и бэкенд общаются по сети.
Обилие аббревиатур: SOAP API, RESTful API и т.п. – не должно сбивать с толку, в конечном счете это просто набор разных правил, которые регламентируют то самое "общение программ". В дальнейшем, мы будем рассматривать примеры, связанные именно с REST API (это популярно, наглядно, зачастую наиболее эффективно).
Сетевые запросы отправляет приложение, которое в том числе работает в вашем браузере. А это значит, что мы можем "своими глазами" посмотреть на API любого web-приложения.
Пример с браузером:
Откроем web-страницу в браузере.
Например, https://dh.cubicle.53xapps.com/ – ее мы используем в учебных целях в нашей школе DHS.
Это веб-страничка с описанием минималистичного API, которое предоставляет JSON-сервер.
В учебных целях, фронтенд разработчики часто используют подобное фейковое API чтобы собрать пример собственного приложения. Вот некоторые популярные из них: jsonplaceholder, randomuser.me, dummyjson.com, fakejson.com
Если вы откроете "инструменты разработчика" (на web-странице нажать правой кнопкой мыши и выбрать "посмотреть код") – во вкладке "сеть" вы увидите сетевой GET-запрос и данные, которые мы получили в ответе на него.
Т.е. API в том числе описывает набор методов для взаимодействия двух программ.
Немного о сетевых протоколах
Популярная аббревиатура HTTP (HyperText Transfer Protocol) кроет свою суть непосредственно в названии – это протокол передачи гипертекста. То есть это сетевой протокол, позволяющим передавать нам по сети веб-страницы.
На самом деле сетевая передача данных устроена довольно сложно и HTTP это один из множества сетевых протоколов, расположенный на верхнем уровне сетевой модели OSI. О модели можно почитать отдельно, но нам подробности знать не обязательно.
Для обеспечения безопасности соединения используется протокол HTTPS – в название добавили слово "безопасность" и это означает что мы имеем дело с криптографией, а именно с протоком TLS (ранее SSL), обеспечивающим шифрование данных, передаваемых по сети.
HTTP-запросы предоставляют доступ к сетевым ресурсам. Для того чтобы как-то разграничить действия в отношении ресурсов на уровне HTTP придуманы различные методы.
Основные виды:
- GET – получение данных
- POST – создание данных
- PUT – полное обновление элемента
- PATCH – частичное обновление элемента
- DELETE – удаление данных
Кроме того, в HTTP существует статус код, состоящий из трех десятичных цифр, который указывает на состояние нашего запроса. Например, популярная фраза “404 Not found” является статус-кодом и пояснением к нему – запрашиваемый ресурс не найден.
Пример с Postman:
Для того, чтобы тестировать и просто отправлять запросы можно пользоваться популярным приложением Postman. Тут есть возможность настраивать параметры вашего сетевого запроса, указывать его методы, способы пред и пост обработки данных запроса. Наши ученики пользуются Postman, когда изучают взаимодействие с бэкендом. Чтобы быстро подготовить бэкенд можно использовать Strapi – специальный фреймворк для управления контентом. Он позволяет нам создать небольшой «бэк» и предоставить REST API для взаимодействия с ним.
Зачем это все
Браузер, Postman, среда программирования – это лишь инструменты разработчика которые позволяют работать с API. Но в конечном счете, эти методы разработчики используют в коде.
Приложение либо отправляет данные либо принимает по заранее установленным в API правилам. Таким образом и обеспечивается взаимодействие программ, ровно для этого и нужен API)))