<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=API</id>
	<title>API - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=API"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=API&amp;action=history"/>
	<updated>2026-07-16T12:48:41Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=API&amp;diff=17398&amp;oldid=prev</id>
		<title>imported&gt;Рогволод: оформление</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=API&amp;diff=17398&amp;oldid=prev"/>
		<updated>2025-11-01T22:30:30Z</updated>

		<summary type="html">&lt;p&gt;оформление&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{о|интерфейсах программирования|организации, использующей аббревиатуру API,|Американский институт нефти}}&lt;br /&gt;
[[Файл:WinAPI Scheme.svg|мини|275x275пкс|Роль API в операционной системе [[Windows]].]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; (&amp;lt;small&amp;gt;[[МФА]]&amp;lt;/small&amp;gt;: {{МФА2|ˌ|e|ɪ|.|p|i|ˈ|a|ɪ}}; [[аббревиатура|аббр.]] от {{lang-en|&amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039;pplication &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039;rogramming &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039;nterface}}&amp;lt;ref&amp;gt;Переводится как «программный интерфейс приложения», «интерфейс прикладного программирования». Часто употребляется упрощённое [[транслитерация|транслитерированное]] [[сленг]]овое название [&amp;#039;&amp;#039;апи́&amp;#039;&amp;#039;]. Используются и укороченные варианты перевода — «интерфейс приложения», «программный интерфейс».&amp;lt;/ref&amp;gt;, дословно &amp;#039;&amp;#039;интерфейс программирования приложения&amp;#039;&amp;#039;) — программный интерфейс, то есть описание способов взаимодействия одной компьютерной программы с другими (в противоположность пользовательскому интерфейсу, используемому для взаимодействия конечного пользователя с программой). Обычно входит в описание какого-либо [[интернет-протокол]]а (например, [[RFC|SCIM]]&amp;lt;ref&amp;gt;{{Cite web |url=https://tools.ietf.org/html/draft-ietf-scim-api-19 |title=System for Cross-Domain Identity Management: Protocol draft-ietf-scim-api-19 |access-date=2018-10-12 |archive-date=2017-07-07 |archive-url=https://web.archive.org/web/20170707190227/https://tools.ietf.org/html/draft-ietf-scim-api-19 |url-status=live }}&amp;lt;/ref&amp;gt;), программного каркаса ([[фреймворк]]а&amp;lt;ref&amp;gt;{{Cite web |url=https://docs.spring.io/spring/docs/current/javadoc-api/ |title=Spring Framework 5.3.1 API |access-date=2018-10-12 |archive-date=2018-10-10 |archive-url=https://web.archive.org/web/20181010053353/https://docs.spring.io/spring/docs/current/javadoc-api/ |url-status=live }}&amp;lt;/ref&amp;gt;) или стандарта вызовов функций [[операционная система|операционной системы]]&amp;lt;ref&amp;gt;{{Cite web |url=https://www.kernel.org/doc/html/latest/userspace-api/index.html |title=The Linux kernel user-space API guide |access-date=2018-10-12 |archive-date=2018-10-12 |archive-url=https://web.archive.org/web/20181012214547/https://www.kernel.org/doc/html/latest/userspace-api/index.html |url-status=live }}&amp;lt;/ref&amp;gt;. Часто реализуется отдельной [[программная библиотека|программной библиотекой]] или сервисом [[операционная система|операционной системы]]. Используется программистами при написании всевозможных [[Прикладное программное обеспечение|приложений]].&lt;br /&gt;
&lt;br /&gt;
Проще говоря, это способ взаимодействия какого-то программного кода с набором каких-то программных компонентов, с помощью которых одна компьютерная программа (например, бот или сайт) может взаимодействовать с другой программой.&lt;br /&gt;
&lt;br /&gt;
== Назначение ==&lt;br /&gt;
API (интерфейс программирования приложения) упрощает процесс программирования при создании приложений, абстрагируя базовую реализацию и предоставляя только объекты или действия, необходимые разработчику. Если графический интерфейс для почтового клиента может предоставить пользователю кнопку, которая выполнит все шаги для выборки и выделения новых писем, то API для ввода/вывода файлов может дать разработчику функцию, которая копирует файл из одного места в другое, не требуя от разработчика понимания операций файловой системы, происходящих за кулисами&amp;lt;ref name=&amp;quot;Clarke4&amp;quot;&amp;gt;{{Cite web |url=http://www.drdobbs.com/windows/measuring-api-usability/184405654 |title=Measuring API Usability |last=Clarke |first=Steven |date=2004 |website=Dr. Dobb&amp;#039;s |access-date=2021-07-09 |archive-date=2022-03-03 |archive-url=https://web.archive.org/web/20220303235859/http://www.drdobbs.com/windows/measuring-api-usability/184405654 |url-status=live }}&amp;lt;/ref&amp;gt;.&amp;lt;!-- это имя функции, тип возвращаемого значения и список аргументов с указанием порядка их следования и типов. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== API как средство интеграции приложений ==&lt;br /&gt;
Если программу (модуль, библиотеку) рассматривать как [[чёрный ящик]], то API — это набор «ручек», которые доступны пользователю данного ящика и которые он может «вертеть» и «переключать».&lt;br /&gt;
&lt;br /&gt;
Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию — высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов.&lt;br /&gt;
&lt;br /&gt;
По такому принципу построены [[Протокол передачи данных|протоколы передачи данных]] по [[Интернет]]у. Стандартный [[стек]] протоколов ([[сетевая модель OSI]]) содержит {{num|7|уровней}} (от физического уровня передачи бит до уровня протоколов приложений, подобных протоколам [[HTTP]] и [[IMAP]]). Каждый уровень пользуется функциональностью предыдущего («нижележащего») уровня передачи данных и, в свою очередь, предоставляет нужную функциональность следующему («вышележащему») уровню.&lt;br /&gt;
&lt;br /&gt;
Понятие протокола близко по смыслу к понятию API. И то и другое является абстракцией функциональности, только в первом случае речь идёт о передаче данных, а во втором — о взаимодействии приложений.&lt;br /&gt;
&lt;br /&gt;
API библиотеки функций и классов включает описание &amp;#039;&amp;#039;сигнатур&amp;#039;&amp;#039; и &amp;#039;&amp;#039;семантики функций&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Сигнатура функции ===&lt;br /&gt;
Сигнатура функции — часть общего объявления функции, позволяющая средствам трансляции идентифицировать функцию среди других. В различных языках программирования существуют разные представления о сигнатуре функции, что также тесно связано с возможностями [[Перегрузка процедур и функций|перегрузки функций]] в этих языках.&lt;br /&gt;
&lt;br /&gt;
Иногда различают &amp;#039;&amp;#039;сигнатуру вызова&amp;#039;&amp;#039; и &amp;#039;&amp;#039;сигнатуру реализации&amp;#039;&amp;#039; функции. Сигнатура вызова обычно составляется по синтаксической конструкции вызова функции с учётом сигнатуры области видимости данной функции, имени функции, последовательности фактических типов аргументов в вызове и типе результата. В сигнатуре реализации обычно участвуют некоторые элементы из синтаксической конструкции объявления функции: спецификатор области видимости функции, её имя и последовательность формальных типов аргументов.&lt;br /&gt;
&lt;br /&gt;
Например, в языке программирования [[C++]] простая функция однозначно опознаётся [[компилятор]]ом по своему имени и последовательности типов своих аргументов, что составляет сигнатуру функции в этом языке. Если функция является методом некоторого класса, то в сигнатуре будет участвовать и имя класса.&lt;br /&gt;
&lt;br /&gt;
В [[Java|языке программирования Java]] сигнатуру метода составляют его имя и последовательность типов параметров; тип возвращаемого значения в сигнатуре не участвует&amp;lt;ref&amp;gt;{{Cite web|url=https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.2|title=Java Language Specification. Chapter 8.4.2. &amp;quot;Method Signature&amp;quot;|author=|website=Java Language Specification|date=|publisher=docs.oracle.com|access-date=2020-02-24|archive-date=2020-05-03|archive-url=https://web.archive.org/web/20200503080146/https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.2|url-status=live}}&amp;lt;/ref&amp;gt;.&amp;lt;!-- это имя функции, тип возвращаемого значения и список аргументов с указанием порядка их следования и типов. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Семантика функции ===&lt;br /&gt;
Семантика функции — это описание того, что данная функция делает. Семантика функции включает описание того, что является результатом вычисления функции, как и от чего этот результат зависит. Обычно результат выполнения зависит только от значений аргументов функции, но в некоторых модулях есть понятие состояния. Тогда результат функции может зависеть от этого состояния, и, кроме того, результатом может стать изменение состояния. Логика этих зависимостей и изменений относится к семантике функции. Полным описанием семантики функций является исполняемый код функции или математическое определение функции.&lt;br /&gt;
&lt;br /&gt;
== API операционных систем. Проблемы, связанные с многообразием API ==&lt;br /&gt;
Практически все [[Операционная система|операционные системы]] ([[UNIX]], [[Windows]], [[OS{{nbsp}}X|OS X]], [[Linux]] и т. д.) имеют API, с помощью которого программисты могут создавать приложения для этой операционной системы. Главный API операционных систем — это множество [[Системный вызов|системных вызовов]].&lt;br /&gt;
&lt;br /&gt;
В индустрии программного обеспечения общие стандартные API для стандартной функциональности играют важную роль, так как они гарантируют, что все программы, использующие общий API, будут работать одинаково хорошо или, по крайней мере, типичным привычным образом. В случае API графических интерфейсов это означает, что программы будут иметь похожий пользовательский интерфейс, что облегчает процесс освоения новых программных продуктов.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, различия в API различных операционных систем существенно затрудняют перенос приложений между платформами. Существуют различные методы обхода этой сложности — написание «промежуточных» API (API графических интерфейсов [[wxWidgets]], [[GTK]] и т. п.), написание библиотек, которые отображают системные вызовы одной ОС в системные вызовы другой ОС (такие среды исполнения, как [[Wine]], [[cygwin]] и т. п.), введение стандартов кодирования в языках программирования (например, стандартная библиотека [[Си (язык программирования)|языка C]]), написание интерпретируемых языков, реализуемых на разных платформах ([[Bourne shell|sh]], [[Python]], [[Perl]], [[PHP]], [[Tcl]], [[JavaScript]], [[Ruby]] и т. д.).&lt;br /&gt;
&lt;br /&gt;
Также в распоряжении программиста часто находится несколько различных API, позволяющих добиться одного и того же результата. При этом каждый API обычно реализован с использованием API программных компонент более низкого уровня абстракции.&lt;br /&gt;
&lt;br /&gt;
Например: для того, чтобы увидеть в [[браузер]]е строчку «[[Hello, world!]]», достаточно лишь создать [[HTML]]-документ с минимальным заголовком и простейшим телом, содержащим данную строку. Когда браузер откроет этот [[документ]], программа-браузер передаст имя [[файл]]а (или уже открытый [[Файловый дескриптор|дескриптор]] файла) библиотеке, обрабатывающей HTML-документы, та, в свою очередь, при помощи API операционной системы прочитает этот файл и разберётся в его устройстве, затем последовательно вызовет через API библиотеки стандартных графических примитивов операции типа «очистить окошко», «написать „Hello, world!“ выбранным шрифтом». Во время выполнения этих операций библиотека [[графический примитив|графических примитивов]] обратится к библиотеке оконного интерфейса с соответствующими запросами, уже эта библиотека обратится к API операционной системы, чтобы записать данные в буфер [[видеокарта|видеокарты]].&lt;br /&gt;
&lt;br /&gt;
При этом практически на каждом из уровней реально существует несколько возможных альтернативных API. Например: мы могли бы писать исходный документ не на HTML, а на [[LaTeX]], для отображения могли бы использовать любой браузер. К тому же различные браузеры используют различные HTML-библиотеки, и, кроме того, всё это может быть собрано с использованием различных библиотек примитивов и на различных операционных системах.&lt;br /&gt;
&lt;br /&gt;
Основными сложностями существующих многоуровневых систем API, таким образом, являются:&lt;br /&gt;
* Сложность [[портирование|портирования]] программного кода с одной системы API на другую (например, при смене [[Операционная система|ОС]]);&lt;br /&gt;
* Потеря функциональности при переходе с более низкого уровня на более высокий. Грубо говоря, каждый «слой» API создаётся для облегчения выполнения некоторого стандартного набора операций. Но при этом реально затрудняется, либо становится принципиально невозможным выполнение некоторых других операций, которые предоставляет более низкий уровень API.&lt;br /&gt;
&lt;br /&gt;
== Наиболее известные API ==&lt;br /&gt;
{{Список примеров|дата=2013-11-17}}&lt;br /&gt;
; [[Операционная система|Операционных систем]]&lt;br /&gt;
&lt;br /&gt;
* [[Cocoa]]&lt;br /&gt;
* {{iw|Linux Kernel API||en|Linux Kernel API}}&lt;br /&gt;
* [[OS/2 API]]&lt;br /&gt;
* [[Windows API]]&lt;br /&gt;
&lt;br /&gt;
; [[Компьютерная графика|Графических интерфейсов]]&lt;br /&gt;
* [[DirectDraw]]/[[Direct3D]] (часть [[DirectX]])&lt;br /&gt;
* [[SFML]]&lt;br /&gt;
* [[OpenVG]]&lt;br /&gt;
* [[Simple DirectMedia Layer|SDL]]&lt;br /&gt;
* [[Vulkan]]&lt;br /&gt;
* [[Mantle (API)|Mantle]]&lt;br /&gt;
&lt;br /&gt;
; [[Звук|Звуковых интерфейсов]]&lt;br /&gt;
* [[DirectMusic]]/[[DirectSound]] (часть [[DirectX]])&lt;br /&gt;
* [[OpenAL]]&lt;br /&gt;
&lt;br /&gt;
; [[Аутентификация|Аутентификационных систем]]&lt;br /&gt;
* [[BioAPI]]&lt;br /&gt;
* [[PAM]]&lt;br /&gt;
&lt;br /&gt;
=== Web API ===&lt;br /&gt;
Используется в веб-разработке — содержит, как правило, определённый набор [[HTTP]]-запросов, а также определение структуры HTTP-ответов, для выражения которых чаще всего используют [[XML]]− или [[JSON]]−формат, а также [[Protocol Buffers|ProtoBuf]], [[External Data Representation|XDR]] и некоторые другие.&lt;br /&gt;
&lt;br /&gt;
Web API является практически синонимом для веб-службы, хотя в последнее время за счёт тенденции [[Веб 2.0|Web 2.0]] осуществлён переход от [[SOAP]] к [[REST]] типу коммуникации. Веб-интерфейсы, обеспечивающие сочетание нескольких сервисов в новых приложениях, известны как гибридные.&lt;br /&gt;
&lt;br /&gt;
Пример: [[MediaWiki]] [[mw:API:Main page/ru|API]]&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
{{wiktionary|API}}&lt;br /&gt;
* [[Двоичный интерфейс приложений]]&lt;br /&gt;
* [[Абстрактный тип данных]]&lt;br /&gt;
* [[Повторное использование кода]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
{{нет источников|дата=2011-05-13}}&lt;br /&gt;
&lt;br /&gt;
{{Аспекты операционных систем}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:API| ]]&lt;br /&gt;
[[Категория:Программирование]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Рогволод</name></author>
	</entry>
</feed>