Прикладний програмний інтерфейс
Прикладни́й програ́мний інтерфе́йс (інтерфейс програмування застосунків, інтерфейс прикладного програмування) (англ. Application Programming Interface, API) — набір визначень підпрограм, протоколів взаємодії та засобів для створення програмного забезпечення.[1] Спрощено — це набір чітко визначених методів для взаємодії різних компонентів. API надає розробнику засоби для швидкої розробки програмного забезпечення. API може бути для веб-базованих систем, операційних систем, баз даних, апаратного забезпечення, програмних бібліотек.
Призначення
Одним з найпоширеніших призначень API є надання набору широко використовуваних функцій, наприклад для малювання вікна чи іконок на екрані. Програмісти використовують переваги API у функціональності, таким чином їм не доводиться розробляти все з нуля. API є абстрактним поняттям — програмне забезпечення, що пропонує деякий API, часто називають реалізацією (англ. implementation) даного API. У багатьох випадках API є частиною набору розробки програмного забезпечення, водночас, набір розробки може включати як API, так і інші інструменти/апаратне забезпечення, отже ці два терміни не є взаємозамінювані.[2]
Високорівневі API часто програють у гнучкості. Виконання деяких функцій нижчого рівня стає набагато складнішим, або навіть неможливим.
Приклади API
- POSIX і System V Interface Definition
- Windows API
- OpenGL
- DirectX
- GDI
Детальний опис
Наприклад, в мові Java, якщо програміст хоче використовувати клас «Scanner» (клас, який зчитує інформацію від користувача у програмах, орієнтованих на текстові операції), він імпортує бібліотеку «java.util.Scanner», щоб використовувати методи класу «Scanner» (у даному прикладі nextLine() i close()). Це приклад з API, що дозволяє взаємодіяти з бібліотеками в мові Java.
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
System.out.println("Enter your name: ");
Scanner input = new Scanner(System.in);
String name = input.nextLine();
System.out.println("Your name is " + name + ".");
input.close();
}
}
Документація
Безліч середовищ розробки програмного забезпечення надають документацію, пов'язану з ППІ (Прикладним Програмним Інтерфейсом) у деяких цифрових форматах, наприклад, Perl поставляється разом з програмою perldoc:
$ perldoc -f sqrt
sqrt EXPR
sqrt #Return the square root of EXPR. If EXPR is omitted, returns
#square root of $_. Only works on non-negative operands, unless
#you've loaded the standard Math::Complex module.
Мова python надає інструмент pydoc:
$ pydoc math.sqrt
Help on built-in function sqrt in math:
math.sqrt = sqrt(...)
sqrt(x)
Return the square root of x.
Java поставляється з документацією організованою в HTML сторінки (JavaDoc формат), а Microsoft розподіляє ППІ документацію для своїх мов (Visual C++, C#, Visual Basic, F#, і т. ін.), вбудовані в довідкову систему Visual Studio.
Прикладний програмний інтерфейс в об'єктноорієнтованих мовах
В об'єктноорієнтованих мовах прикладний програмний інтерфейс зазвичай включає в себе опис набору визначень класу, з набором форм поведінки, пов'язаних з цими класами. Це абстрактне поняття пов'язане з реальними функціями, які надані або надаватимуться, класами, які реалізуються в методах класу.
Прикладний програмний інтерфейс в цьому випадку можна розглядати як сукупність всіх методів, які публічно доступні в класах (зазвичай званий інтерфейс класу). Це означає, що прикладний програмний інтерфейс вказує методи, за допомогою яких взаємодіє з об'єктами, отриманими з визначень класів і обробляє їх.
У більш загальному плані можна визначити Прикладний Програмний Інтерфейс як сукупність усіх видів об'єктів, які можна вивести з визначення класу, і пов'язаних з ними можливих варіантів поведінки.
Наприклад: клас, що представляє Stack, може просто виставити публічно два методи Push() (для додавання нового елемента в стек) і Pop() (для вилучення останнього пункту, ідеально розташований на вершині стека).
У цьому випадку Прикладний Програмний Інтерфейс може бути інтерпретованим як два методи pop() і push(), або, більш широко, використовується варіант, коли можна використовувати елемент типу Stack, який реалізує поведінку стека, надаючи йому можливість для додавання / видалення елементів з вершини. Друга інтерпретація видається більш доречною в дусі об'єктноорієнтованого підходу.
Якість документації, пов'язаної з Прикладним Програмним Інтерфейсом, є часто ключовим фактором, що визначає його успішність з точки зору простоти використання.
Бібліотеки і платформи прикладних програмних інтерфейсів
ППІ, як правило, пов'язаний із бібліотеками програмного забезпечення: ППІ описує і вказує очікувану поведінку в той час, як бібліотека є фактичною реалізацією даного набору правил. Один ППІ може мати декілька реалізацій (або жодної, будучи абстрактним) у вигляді різних бібліотек, які мають такий же інтерфейс.
Прикладний програмний інтерфейс також може бути пов'язаним з платформами програмування: платформа може бути заснована на кількох бібліотеках реалізує декілька інтерфейсів ППІ, але на відміну від звичайного використання ППІ, доступ до поведінки вбудований в платформу опосередкований шляхом розширення його змісту новими класами і вставлений в саму платформу. Крім того, загальний потік управління програми може бути під контролем абонента.
Прикладний програмний інтерфейс та протоколи
Прикладний програмний інтерфейс може бути також реалізацією протоколу.
Коли ППІ реалізує протокол, він може бути заснованим на проксі-методах віддалених викликів, що засновані на протоколі зв'язку. Роль ППІ може полягати саме в тому, щоб приховати деталі транспортного протоколу. Наприклад: RMI є ППІ, який реалізує протокол або JRMP IIOP як RMI-IIOP.
Протоколи, як правило, розподіляються між різними технологіями і зазвичай дозволяють різним технологіям обмінюватися інформацією, діючи як абстракція між двома світами. ППІ, як правило, є специфічним для конкретної технології: звідси, інтерфейси даної мови не можуть бути використані на інших мовах, якщо виклики функції не будуть перетворені з конкретної адаптації бібліотеки.
Прикладний програмний інтерфейс спільного використання з допомогою віртуальної машини
Деякі мови, серед яких такі, що працюють на віртуальних машинах (наприклад: мови, сумісні з NET CLI середовища CLR і JVM сумісних мов у віртуальній машині Java) можуть ділитися програмними інтерфейсами.
У цьому випадку віртуальна машина дозволяє мові взаємодії завдяки спільному знаменнику віртуальної машини, що абстрагується від конкретної мови, використовувати проміжний байт-код і його мову.
Прикладний програмний інтерфейс у WEB
При використанні прикладного програмного інтерфейсу в контексті веб-розробки, як правило, ППІ визначається набором повідомлень запиту HTTP, також визначається структура повідомлень-відповідей, зазвичай у розширенні мови розмітки XML або в форматі об'єктного запису JavaScript (JSON). У той час як прикладний програмний інтерфейс у Web історично був практично синонімом для веб-служби, останнім часом тенденція змінилась (так званий Web 2.0) на відхід від Simple Object Access Protocol (SOAP) на основі веб-сервісів і сервіс-орієнтованої архітектури (SOA) на більш прямі передачі репрезентативного стану (REST) стилів веб-ресурсів та ресурсоорієнтованої архітектури (ROA).[3] Частина цієї тенденції пов'язана з рухом Семантичного веб-ресурсу до Опису Платформ (RDF), Концепції розвитку веб-технологій інженерних онтологій.[4] Прикладні програмні інтерфейси у Web, що дозволяють комбінувати декількома прикладними програмними інтерфейсами в нові додатки називають гібридними.[5]
Політика впровадження
Існує два основних варіанти впровадження прикладного програмного інтерфейсу:
- Захист інформації про програмний інтерфейс від широкого загалу. Наприклад, компанія Sony дозволила розробляти програмний інтерфейс для PlayStation 2 лише ліцензованим розробникам. Це дозволило Sony контролювати, хто розробляв ігри для PlayStation 2. Такий варіант дозволяє компаніям переважаючий контроль якості за випуском продукції, і також надає можливості для додаткового доходу від ліцензування.
- Розробка програмного інтерфейсу існує також у вільному доступі. Наприклад, компанія Microsoft робить програмний інтерфейс до Microsoft Windows загально доступним, а компанія Apple, своєю чергою, впроваджує прикладні програмні інтерфейси Carbon та Cocoa, для того, щоб дозволити писати програмне забезпечення під свої платформи.
Прикладні програмні інтерфейси та авторські права
У 2010 році Oracle подала до суду на Google, за поширення нової версії Java, вбудованої у нову версію ОС Android без дозволу на використання JavaAPI, хоча аналогічний договір був наданий на використання проєкту OpenJDK. Суддя виніс рішення у справі Oracle проти Google, про те, що даний програмний інтерфейс не може бути захищеним авторськими правами у США.[6]
Джерела
- Reddy, Martin (14 березня 2011). API Design for C++ (англ.). Elsevier. ISBN 978-0-12-385004-1.
- Clarke, Steven. Measuring API Usability. Dr. Dobb's. Процитовано 28 січня 2022.
- Wayback Machine. web.archive.org. 28 вересня 2011. Процитовано 28 січня 2022.
- Parr, Ben (21 травня 2009). The Evolution of the Social Media API. Mashable (англ.). Процитовано 28 січня 2022.
- "API-fication" (PDF download). www.hcltech.com.
- Dr. Dobb's | Good stuff for serious developers: Programming Tools, Code, C++, Java, HTML5, Cloud, Mobile, Testing. Dr. Dobb's. Процитовано 28 січня 2022.