API (Application Programming Interface, с англ. программный интерфейс приложений) — это описание констант, классов, структур, процедур и функциональных возможностей компьютерной программы, простыми словами набор компонентов, при помощи которых одна программа может взаимодействовать с другой.
Как работает API
Если мы представим прикладную программу как концепцию «черного ящика», программный интерфейс можно понимать как механические органы управления — тумблеры, ручки, кнопки.
Черный ящик — система, имеющая вход для ввода информации и выход для ее вывода.
Программные компоненты API образуют строгую иерархическую пирамиду: высокоуровневые элементы взаимодействуют с компонентами по иерархии ниже. По такой цепочке компоненты и двигаются: от высших к базовым.
Программный интерфейс может реализовываться:
- Сервисом ОС.
- Интернет-протоколом.
- Программной библиотекой.
- Фреймворком.
- Множеством иных способов.
Сначала добавим пару пару слов об интерфейсе, потому что это некая граница между двумя функциональными объектами.
Пример — User Interface, который является общей границей между программой и пользователем. По сути UI — просто графическая оболочка программы, которая позволяет пользователю взаимодействовать с ее функциями. Средства ввода — мышь и клавиатура — тоже интерфейс.
Схема графического интерфейса (GUI) выглядит так:
Интерфейс может быть не только пользовательским, но и программным — для общения двух разных программ.
Зачем нужен API
Собственный API (например, у прикладной программы) — это универсальное и ускоренное решение для разработчика. Вы лишь однажды настраиваете серверную часть, а затем спокойно используйте созданный интерфейс в прикладных программах, веб-приложениях, на сайтах — где угодно.
Разработчики создают собственный API для связи с другими программами, чтобы:
- Не прописывать серверную часть каждый раз заново. На это тратится много времени.
- Сделать разработку более безопасной (посторонние люди не могут получить доступ к серверным и другим функциям).
- Не увеличивать размер исходной программы.
Еще один сценарий, зачем разработчики создают свой API — получение прибыли. Разработка программного интерфейса может вестись только с этой целью. Например, «Яндекс» разработал речевой синтезатор, чтобы зарабатывать на тех, кто хочет использовать его в своих программах.
Также на API создается колоссальное количество совершенно новых программ.
Виды API в 2023 году
Большая часть пользовательских интерфейсов относятся к вебу: это REST, RPC, SOAP.
Не путайте SOAP и REST. SOAP — это протокол, REST — архитектурный шаблон. SOAP использует служебные интерфейсы для предоставления своих функций клиентским приложениям, а REST использует унифицированные локаторы служб. Делается это для организации доступа к компонентам на аппаратном устройстве. SOAP, в отличие от REST, требует большей пропускной способности для своего использования.
Обычному пользователю не обязательно вдаваться в детали, но какие-то из них используются для удаленного вызова, другие для передачи состояний, третьи — для доступа к объектам.
Можно систематизировать типы технологии по категории доступа:
- Публичные. Создаются для получения прибыли, повышения популярности какого-либо сервиса и его дальнейшего продвижения.
- Для внутреннего использования. Используется разработчиками, например, для тестирования новых программ или в ходе отладки.
- Аффилированные. Могут использоваться для создания новых продуктов или их изменения. Спонсорские программные интерфейсы обычно создаются очень крупными сервисами для дальнейшей передачи другим разработчикам.
Также можно систематизировать по изначальной программе или сервису, в которые они встроены:
- операционная система;
- приложение;
- сайт.
Давайте немного отвлечемся и взглянем на пример документации по API OpenJDK:
Обратите внимание на то, как в документации досконально описывается каждая возможность API. В данном случае — инструкция для работы с методом сортировки списка при помощи компаратора.
Примеры использования API
Вот список сервисов, которые работают благодаря этой технологии:
- Переводчик Google в режиме встраиваемого окна на сайтах.
- «Google Карты» внутри мобильного приложения Uber.
- «Сервисы 1С» на сайтах.
- Платежные системы в интернете.
- Веб-аналитика на сайте, например, «Яндекс.Метрика» и «Google Аналитика».
- Кнопки социальных сетей на сайтах:
- Карты «2ГИС» на сайтах.
- Пиксель «ВКонтакте», другие пиксели запрещенных социальных сетей:
Без этой технологии будет сложно! Например, вы создали сайт. Чтобы он работал как обычно, пришлось бы вручную прописывать программу для подключения к интернету, для работы с несколькими браузерами, для работы с несколькими операционными системами.
Даже простой сайт общается с браузером. Браузер общается с ОС, а операционная система — с драйверами системы.
Если бы все API разом отключились, 95 % (или больше) программ и сервисов, которыми вы пользуетесь ежедневно, просто перестали бы работать.
Достоинства и недостатки технологии
Плюсы
- Необходимый доступ к чужим сервисам и технологиям — быстрый и надежный.
- Экономия времени и человеческих ресурсов при создании своих программ на основе чужих технологий.
- Отсутствие неприятных сюрпризов. Реализовать можно даже сложные функции, при этом разработчику не нужно готовиться к нестандартному поведению программы. Ну а системность и стабильность, описанные выше, сами по себе ценны для каждого разработчика.
- Не нужно заниматься сложной разработкой. То есть по факту — изобретать велосипед. Нет необходимости писать код для сложного функционала, который уже был реализован до вас.
- Универсальность. Пользовательские интерфейсы работают быстро и везде и используются повторно такое количество раз, которое необходимо разработчику.
Минусы
- Сложность редактирования нижележащих по иерархии компонентов. Она обусловлена особенностями построения элементов на разных этапах иерархии.
- Много трудностей при ручной координации вызовов. Соединить вызовы методов API сложно, особенно при решении нестандартных задач, так как придется вручную предусматривать множество сценариев координации. С простыми же функциями все понятно и просто.
- Сложности обновления и добавления новых функций. Вносить изменения в программный интерфейс можно очень долго — и это только одна из проблем. Вторая заключается в том, что все эти изменения необходимо согласовывать в компании или сразу с разработчиком, а это займет еще большее количество времени или вообще будет невозможным.
- Тяжело адаптировать код с одного программного интерфейса на другой. Портирование особенно затруднено при глобальных изменениях — например, при замене операционной системы.
- Большое количество разных стандартов. Да, программные интерфейсы семимильными шагами идут к стандартизации. Но это лишь перспектива ближайших лет, а пока что общепринятые стандарты в программных интерфейсах просто отсутствуют. Все это замедляет процесс разработки, отладки, а еще невероятно мешает обработке в режиме реального времени.
- Некоторые решения просто плохо спроектированы изначально, например, программный интерфейс создан любителем для решения какой-либо небольшой задачи. Такие API могли проектироваться неграмотно и от них лучше изначально отказаться.
В идеале созданием пользовательских интерфейсов должны заниматься не разработчики приложений, а узкоспециализированные программисты.
Как происходит вызов функций API
Вызвать интерфейс программирования приложений можно непрямыми и непрямыми методами. Их как минимум пять.
Непрямой метод вызова API
Вы работаете с программой через графический пользовательский интерфейс. Допустим, нужно быстро сформулировать какую-либо статистику в виде отчета. Вы открываете программу, выбираете необходимый период и нажимаете кнопку «Построить» («Сформировать», «Загрузить», не суть как она называется). Пару секунд — и отчет готов. Магия в том, что это также основано на наборе функций интерфейса программирования приложений.
Теперь рассмотрим 4 прямых способа.
Вызов API внутри программы
Вы делаете первый вызов из графического интерфейса программы, а остальные составляющие API «общаются» друг с другом уже самостоятельно. Соответственно, будут как минимум две функции: вызов из интерфейса и обновление каких-либо данных. Например, 1-я функция — добавить новую строчку, 2-я — обновить данные для построения новой версии таблицы.
В 98 % случаев вызов внутри себя используется самими разработчиками, поэтому никаких дополнительных сложностей возникать не должно.
Автоматические тесты добывают необходимые методы
Это специальные программы, цель которых обнаружить какие-либо неполадки в исходном коде. Чтобы обнаружить ошибки и баги, они пытаются совершать такие же действия, как и настоящий пользователь.
Автоматические тесты могут делаться через пользовательский графический интерфейс или через интерфейс программирования приложений. При этом предусмотрено тестирование разных уровней:
- GUI — имитация действий пользователя;
- API — уровень ниже;
- UNIT — для проверки каких-либо отдельных функций, например, безопасности и юзабилити.
Система А добывает данные через API системы В
Например, вам необходимо добавить систему рекомендаций на свой сайт. Эта система подразумевает всплывающие варианты ответов в поисковой строке. Допустим, это будут адреса, чтобы пользователь при заказе не вводил почтовый адрес полностью, а мог выбрать его из списка, просто введя 2-3 буквы.
Вы подключаете API любого подходящего вам сервиса к сайту. После этого сайт сможет отправлять запросы на необходимый ресурс через программный интерфейс приложений и отображать данные уже у себя.
Это т сценарий вызова API особенно характерен для тестирования корректности интеграций.
Ручной вызов API пользователем
Не нужно возиться с GUI, если можно сделать всю работу прямо из API. Существует немало сценариев вызова человеком:
- Проверка корректности логики. Имеется в виду логика в цепочке клиент-сервера. Любой разработчик рано или поздно сталкивается с такими ошибками, так как нужно взаимодействовать с API по HTTP.
- Проверка поведения программы. Это разнообразные виды тестирований, необходимые разработчику.
- Ускорение программы. Разные виды оптимизации, для любых целей, например, сделать загрузку товаров более быстрой.
Актуальные тренды в API и разработке 2023 года
- Глобальное изменение бизнес-процессов и логики разработки. API-интерфейсы практически во всех сферах ускоряют бизнес-процессы и улучшают логику разработки.
- Массовое изменение в фундаментальные технологические инфраструктуры. Создатели программного обеспечения только наверстывают упущенное, но уже сейчас понятно: разработка программного интерфейса приложений начинает вписываться в общий жизненный цикл разработки любого ПО.
- Улучшение безопасности и защиты программных интерфейсов. В последние годы вопрос уязвимости API стал одним из главных маркеров разработки — такие интерфейсы становятся гораздо более надежными.
- Армия пользователей. За этой технологией стоят настоящие человеческие, часто индивидуальные отношения.
- Программные интерфейсы приложений теперь создаются и задумываются как прикладные программы. Общие черты вы найдете в задействовании концепции брейнстормов, контролировании разных версий, тестировке и вообще в самом процессе разработки.
- Новая категория продукта. Интерфейс программирования приложений — это продукт от разработчиков для разработчиков. Раньше возникали типичные проблемы: например, отсутствие поддержки саппорта или стабильность появления пофиксенных (от багов) версий.
- Стандартизация. Она также затронула интерфейс программирования приложений. Разработчики хотят найти унифицированные методы взаимодействия, например, используют запросы REST.
Harvard Business Review отмечает: вам не обязательно быть технологической компанией, чтобы пользоваться преимуществами API — возможности есть в каждой отрасли. Использование программных интерфейсов особенно актуально не только для крупных, но и для малых бизнесов, которые пытаются охватить цифровую аудиторию через перенасыщенные и жестко контролируемые рекламные сети.
Программный интерфейс приложений освобождает человека от посредников, соединяя одну вычислительную систему с другой напрямую.
Но забывать о пользовательском опыте на всех уровнях таких систем явно не стоит. Об этом говорит ведущий глобальный специалист по развитию бизнеса Эммелин Ван из AWS Marketplace: «Можно точно сказать, что эта технология предназначается для нашей повседневной жизни и она готова влиять на все ее аспекты еще большим образом. Возьмите любую отрасль, например, автомобильную. Казалось бы, в ней API никак не используется. Но это заблуждение. Удаленный старт двигателя, подкачка шин перед поездкой, получение уведомления на смартфон о предстоящей замене масла. Все это — также API».
Сейчас в среде разработчиков к API относится гораздо более уважительнее. В итоге мы имеем предсказуемый цикл разработки, стабильность, квалифицированную поддержку.