Для работы во внешних программных продуктах, для написания программистами всевозможных приложений часто используется интерфейс программирования приложений, английская аббревиатура application programming interface – API (АПИ). По сути, это набор для предоставляемых приложений, составленный из готовых классов, функций, структур, констант.
АПИ определяет функциональность, предоставляемую программой (модулем, библиотекой), при этом программа позволяет не обращать внимания на принцип реализации функциональности, на взаимодействие друг с другом программных компонентов посредством АПИ. Обычно у компонентов иерархическое построение, когда высокоуровневые компоненты используют низкоуровневые, а те используют компоненты более низкого уровня, что сходно принципу построения протоколов передачи данных по интернету. Стандартный стек протоколов (сетевой модели OSI) состоит из 7 уровней, от передачи бит на физическом уровне до уровня протоколов приложений, например, HTTP и IMAP. При этом каждый уровень использует функциональностью предыдущего уровня и предоставляет функциональность следующему уровню.
АПИ библиотеки классов и функций содержат описание сигнатур, семантики функций. Так сигнатура функции является частью общего объявления функции, что посредством средств трансляции позволяет идентифицировать данную функцию среди других. Различные языки программирования имеют разные представления о сигнатуре функций, на что оказывают влияние возможности перегрузки в этих языках. Поэтому иногда отличают сигнатуру реализации функции и сигнатуру вызова. Обычно сигнатуру вызова составляют по синтаксической конструкции с учетом области видимости сигнатуры функции, имени функции, а также последовательности аргументов в вызове, типе результата. В сигнатуре реализации участвуют элементы синтаксической конструкции объявления функции – это спецификатор области видимости, имя, последовательность формальных аргументов функции.
Семантика функции является описанием действий данной функции, и включает в себя описание результатов вычисления функции, их зависимости. Чаще всего на результат выполнения влияют значения аргументов функции, но в отдельных модулях это понятие состояния. В этом случае на результат функции влияет состояние, а результат может быть, как изменение состояния. Логику этих зависимостей, изменений относят к семантике функции. Полное описание семантики функций – это исполняемый код функции, даже математическое определение функции.
Практически во всех операционных системах присутствует АПИ, используемый программистами для создания приложения для ОС, где главный АПИ операционных систем является множеством системных вызовов. Индустрия программного обеспечения широко использует общие стандартные АПИ, поскольку они важны и гарантируют, что программы, использующие общий АПИ, все будут работать хорошо или типичным привычным образом. АПИ графических интерфейсов облегчает освоение новых программных продуктов, поскольку предлагает похожий пользовательский интерфейс. А вот отличия в АПИ, например, операционных систем заметно затрудняют между платформами перенос приложений, для чего используют ряд методов обхода этой сложности: создают «промежуточные» АПИ, написание библиотек, отображающих вызовы одной ОС в вызовы другой ОС, в языки программирования вводят стандарты кодирования.
Нередко для достижения требуемого результата программист может использовать различные АПИ, при этом каждый АПИ использует АПИ программных компонентов низшего уровня абстракции. Так, чтобы в браузере увидеть строчку «Hello, world!», необходимо создать HTML-документ простейшего тела и с минимальным заголовком из данной строки. Открывая документ, программа браузера передает имя файла в обрабатывающую HTML-документы библиотеку, а та при помощи АПИ ОС прочитает файл, разберется в его устройстве, и затем, используя АПИ библиотеки графических примитивов, последовательно вызовет операции: «очистить окошко», «написать «Hello!». При исполнении этих операций библиотека с соответствующими запросами обращается к библиотеке оконного интерфейса, а та обращается к АПИ ОС для записи данных в буфер видеокарты.
Основными сложностями многоуровневых систем АПИ на сегодня являются: портирование программного кода между разными системами АПИ; возможная потеря функциональности во время перехода с низкого уровня на высокий. Хотя создание каждого «слоя» АПИ предназначено для облегчения выполнения ряда стандартных наборов операций, но реально затрудняется, и даже становится невозможным в принципе выполнение других операций, более низкого уровня АПИ.