Application Programming Interface (API)

**Application Programming Interface** (API) այն եղանակն, որով երկու կամ ավելի համակարգչային ծրագրեր կամ բաղադրիչներ կարող են շփվել միմյանց հետ։ Դա ծրագրային միջերեսի տեսակ է, որը ծառայություն է առաջարկում այլ ծրագրային մասերի համար։ API-ի կառուցվածքը կամ օգտագործման ուղեցույցը կոչվում է API առանձնահատկություն (API specification)։ Հաշվարկային համակարգը, որը համապատասխանում է այս ստանդարտին, ասվում է, որ այն իրականացնում է կամ բացահայտում է API։ API տերմինը կարող է վերաբերվել կամ հատուկ ստանդարտին, կամ դրա իրականացմանը։ Մինչդեռ համակարգի օգտատիրոջ միջերեսը թելադրում է, թե ինչպես են վերջին օգտվողները փոխազդում տվյալ համակարգի հետ, ապա նրա API-ն թելադրում է, թե ինչպես գրել կոդ, որն օգտվում է այդ համակարգի հնարավորություններից:մինի|ՆԱՍԱ-ի կողմից գրված Web API փաստաթղթերի էկրանային պատկերը, որը ցույց է տալիս APOD-ի օգտագործումը։Ի տարբերություն օգտատիրոջ միջերեսի, որը համակարգիչը միացնում է մարդուն, կիրառական ծրագրավորման միջերեսը միացնում է համակարգիչները կամ ծրագրային ապահովման մասերը միմյանց հետ: Այն նախատեսված չէ ուղղակիորեն օգտագործելու այլ անձի (վերջնական օգտագործողի) կողմից, բացառությամբ համակարգչային ծրագրավորողի, ով այն ներառում է ծրագրային ապահովման մեջ: API-ն հաճախ կազմված է տարբեր մասերից, որոնք գործում են որպես գործիքներ կամ ծառայություններ, որոնք հասանելի են ծրագրավորողին: Ծրագիրը կամ ծրագրավորողը, որն օգտագործում է այս մասերից մեկը, *կանչում է* է API-ի այդ հատվածը: API-ն կազմող զանգերը հայտնի են նաև որպես ենթածրագրեր, մեթոդներ, հարցումներ կամ վերջնակետեր: API-ի հստակեցումը *սահմանում է* այս կանչեը, ինչը նշանակում է, որ այն բացատրում է, թե ինչպես օգտագործել կամ իրականացնել դրանք:

API-ների նպատակներից մեկը համակարգի աշխատանքը ներքին մանրամասներից թաքցնելն է, և ցուցադրել միայն այն մասերը, որոնք ծրագրավորողին օգտակար են, պահպանելով դրանք համատեղելի, նույնիսկ եթե ներքին մանրամասները հետագայում փոխվեն։ API-ն կարող է հարմարեցված լինել հատուկ երկու համակարգերի համար, կամ կարող է լինել ընդհանուր ստանդարտ, որը թույլ է տալիս բազմաթիվ համակարգերի միջև փոխազդեցություն։

Կան API-ներ ծրագրավորման լեզուների, ծրագրային գրադարանների, համակարգչային օպերացիոն համակարգերի և համակարգչային սարքավորումների համար։ API-ները ծագել են 1940-ականներին, սակայն տերմինը չի առաջացել մինչ 1960-ականներ և 1970-ականներ։ Տեխնոլոգիական աշխարհի ներկա օգտագործումը հաճախ վերաբերում է Վեբ API-ներին, որոնք թույլ են տալիս շփում համակարգչների միջև, որոնք միացված են Ինտերնետին։ API-ների վերջին զարգացումները հանգեցրել են միկրոբծարարքների (microservices) աճին, որոնք թուլորեն կապված ծառայություններ են՝ հասանելի հանրային API-ների միջոցով։

API-ները պետք է ունենան տարբերակներ։ Կան երկու հիմնական տարբերակման ռազմավարություններ՝

# **Տարբերակման ներքին՝ URL-ի միջոցով․** այս ռազմավարությունը ներառում է տարբերակման տեղեկությունները API-ի URL-ում: Օրինակ, տարբերակը կարող է ընդգրկվել URL-ի մեջ որպես մաս, ինչպես օրինակ՝ `api.example.com/v1/resource` կամ `api.example.com/v2/resource`։
# **Անմիջական տարբերակի ռազմավարություն**. այս ռազմավարությունը թույլ է տալիս կատարել ցանկացած փոփոխություններ։ Սա հարմար է բարդ հավելվածների և բարդ փոփոխությունների համար։

Այս ռազմավարությունները օգնում են ծրագրավորողներին և օգտագործողներին ապահովել համատեղելիություն և վերահսկել տարբերակի փոփոխությունները API-ի հետ աշխատելիս։

## Նպատակ
Ծրագրեր կառուցելիս API-ն պարզեցնում է ծրագրավորումը՝ վերացականացնելով հիմքում ընկած իրականացումը և բացահայտելով միայն մշակողին անհրաժեշտ օբյեկտները կամ գործողությունները: Օրինակ, էլեկտրոնային փոստի հաճախորդի գրապայմանական միջերեսը կարող է տրամադրել կոճակ, որը կատարում է բոլոր քայլերը նոր էլեկտրոնային փոստերի ստացման և ընդգծման համար, մինչդեռ ֆայլերի մուտք/ելքի API-ն կարող է տրամադրել ծրագրավորողին ֆունկցիա, որը պատճենում է ֆայլը մեկ վայրից մյուսը՝ առանց պահանջելու, որ մշակողը հասկանա ֆայլային համակարգի գործողությունները, որոնք կատարվում են հետևում։

## Տերմինի պատմություն
մինի|1978 թվականի դիագրամ, որն առաջարկում է ընդլայնել API-ի գաղափարը՝ դառնալով ընդհանուր ծրագրավորման ինտերֆեյս՝ միայն կիրառական ծրագրերից դուրս։
API տերմինը սկզբնական շրջանում նկարագրվել է միայն վերջնական օգտագործողի ծրագրերի համար նախատեսված միջերես, որոնք հայտնի էին որպես կիրառման ծրագրեր (application programs): Այս ծագումը դեռևս արտահայտված է «Application Programming Interface» անվանման մեջ։ Այսօր տերմինը ավելի լայն իմաստ ունի՝ ներառելով նաև օգտակար ծրագրեր և նույնիսկ սարքավորումների միջերեսներ։

### 1940-ականներ և 1950-ականներ
API-ի գաղափարը շատ ավելի հին է, քան բուն տերմինը: Բրիտանացի համակարգչային գիտնականներ Մորիս Ուիլքսը և Դեյվիդ Ուիլերը 1940-ականներին աշխատել են մոդուլային ծրագրային գրադարանի վրա EDSAC-ի՝ վաղ համակարգչի համար: Այս գրադարանի ենթածրագրերը պահվել են ծակոտժապավենի վրա, որը կազմակերպված է եղել փաստաթղթերի պահարանում: Այն պարունակել է նաև այն, ինչ Ուիլքսը և Ուիլերը անվանում էին «գրադարանային գրացուցակ» յուրաքանչյուր ենթածրագրի վերաբերյալ նշումների և այն ծրագրի մեջ ներառելու մասին, գրադարանը հիմա կոչվում է API (կամ API հստակեցում կամ API փաստաթուղթ), քանի որ այն հրահանգում է ծրագրավորողին, թե ինչպես օգտագործել (կամ «կանչել») յուրաքանչյուր ենթածրագիր, որն անհրաժեշտ է ծրագրավորողին։

Ուիլկսի և Ուիլերի 1951 թվականի «The Preparation of Programs for an Electronic Digital Computer» գիրքը պարունակում է առաջին հրատարակված API առանձնահատկությունը։ Ջոշուա Բլոխը գտնում է, որ Ուիլքսը և Ուիլերը «թաքնված կերպով հայտնագործել են» API-ն, քանի որ այն ավելի շատ հայտնաբերված, քան հորինված հայեցակարգ է։
մինի|Չնայած այն մարդիկ, ովքեր հորինել են API տերմինը, ծրագրային ապահովում են իրականացրել Univac 1108-ի վրա, նրանց API-ի նպատակն է եղել հնարավոր դարձնել ապարատային անկախ ծրագրեր։

### 1960-ականներ և 1970-ականներ
«Կիրառական ծրագրի միջերես» տերմինը (ծրագրավորման բառի փոխարեն՝ ծրագիր) առաջին անգամ արձանագրվել է 1968 թվականին AFIPS կոնֆերանսի ժամանակ ներկայացված *«Տվյալների կառուցվածքներ և տեխնիկա հեռավոր [[համակարգչային գրաֆիկա]]յի համար»* կոչվող աշխատության մեջ։ Այս հոդվածի հեղինակներն օգտագործել են տերմինը՝ նկարագրելու հավելվածի (այս դեպքում գրաֆիկական ծրագրի) փոխազդեցությունը համակարգչային համակարգի մնացած մասերի հետ: Հետևողական կիրառական միջերեսը (կազմված Ֆորտրան ենթածրագրային կանչերից) նախատեսված է եղել ծրագրավորողին ազատելու գրաֆիկական ցուցադրման սարքի յուրահատկություններից և ապահովելու սարքաշարի անկախությունը, եթե համակարգիչը կամ էկրանը փոխարինվեին։

Տերմինը տվյալների բազա է ներմուծվել Քրիստաֆոր Դեյթի կողմից 1974 թվականին *«Հարաբերական և ցանցային մոտեցումներ. կիրառական ծրագրավորման միջերեսի համեմատություն»* կոչվող հոդվածում։ API-ն դարձել է տվյալների բազայի կառավարման համակարգերի ANSI/SPARC շրջանակի մի մասը: Այս շրջանակը վերաբերվում էր հավելվածի ծրագրավորման միջերեսին առանձին այլ միջերեսներից, ինչպիսին է հարցման միջերեսը: Տվյալների բազայի մասնագետները 1970-ականներին նկատել են, որ այս տարբեր միջերեսները կարող են համակցվել. բավականաչափ հարուստ կիրառական միջերեսը կարող է աջակցել նաև մյուս միջերեսներին։

Այս դիտարկումը հանգեցրել է այն API-ների ստեղծմանը, որոնք աջակցում էին բոլոր տեսակի ծրագրավորմանը։

### 1990-ականներ
1990 թվականին տեխնոլոգ Մալամուդը API-ն սահմանել է որպես «ծրագրավորողին հասանելի ծառայությունների հավաքածու, որը կատարում է որոշակի առաջադրանքներ»։

API-ի գաղափարը կրկին ընդլայնվել է հեռակա ընթացակարգերի կանչերի և Վեբ API-ների բախմամբ։ Համակարգչային ցանցերի տարածմամբ 1970-ականներին և 1980-ականներին, ծրագրավորողները ցանկացել են կանչել գրադարաններ, որոնք գտնվում էին ոչ միայն իրենց տեղական համակարգիչներում, այլ նաև այլ վայրերում գտնվող համակարգիչներում։ Այս հեռակա ընթացակարգերի կանչերը հատկապես լավ աջակցություն են ստացել Java լեզվի կողմից։ 1990-ականներին, ինտերնետի տարածման հետ, ստանդարտներ, ինչպիսիք են CORBA, COM և DCOM, մրցում էին՝ դառնալով API ծառայությունները ցուցադրելու ամենատարածված եղանակը։

### 2000-ականներ
Ռոյ Ֆիլդինգի 2000 թվականի դիսերտացիան՝ «Աճարային ոճեր և ցանցային ծրագրային ճարտարապետությունների նախագծում» UC Irvine-ում, նկարագրեց Ներկայացուցչական վիճակների փոխանցում (REST) և ներկայացրեց «ցանցային ծրագրավորման միջերես» գաղափարը, որը Ֆիլդինգը հակադրում էր ավանդական «գրադարանային» API-ներին։ XML և JSON Web API-ների լայնածավալ կոմերցիոն ընդունումը սկսվեց 2000 թվականին և շարունակվում է 2022 թվականին։ Այսպիսով, Web API-ն այժմ API տերմինի ամենատարածված իմաստն է։

Թիմ Բերներս-Լիի կողմից 2001 թվականին առաջարկած Սեմանտիկ Վեբը ներառել է «սեմանտիկ API-ներ», որոնք վերաձևում են API-ն որպես բաց, բաշխված տվյալների ինտերֆեյս, այլ ոչ թե ծրագրային վարքագծի ինտերֆեյս։ Նեղ տեսակի ինտերֆեյսները դարձել է ավելի տարածված, քան բացերը, սակայն API-ն որպես տվյալների ինտերֆեյսի գաղափարը արմատավորվել է։ Քանի որ վեբ API-ներ լայնորեն օգտագործվում են տարբեր տեսակի տվյալներ փոխանակելու համար, API-ն դարձել է լայն հասկացություն, որը նկարագրում է ինտերնետում տեղի ունեցող շատ հաղորդակցություններ։ Այս կերպ օգտագործվելուց, API տերմինը մասամբ համընկնում է հաղորդակցման պրոտոկոլի տերմինի հետ։

## Օգտագործում
### Գրադարաններ և շրջանակներ
Ծրագրային գրադարանի հետ կապված միջերեսը API-ի մի տեսակ է։ API-ն նկարագրում և սահմանում է «հնարավոր վարքագիծը» (այսինքն՝ առանձնահատկություն), մինչդեռ գրադարանն այդ կանոնների հավաքածուի «իրական իրականացումն» է։

Մեկ API կարող է ունենալ մի քանի իրականացումներ (կամ որևէ մեկի չունենալ, լինելով աբստրակտ) տարբեր գրադարանների ձևով, որոնք կիսում են նույն ծրագրավորման միջերեսը։

API-ի և նրա իրականացման բաժանումը կարող է թույլ տալ, որ մեկ լեզվով գրված ծրագրերը օգտագործեն այլ լեզվով գրադրված գրադարաններ։ Օրինակ, քանի որ Scala-ն և Java-ն համատեղելի բայթկոդ են վերածվում, Scala-ի մշակողները կարող են օգտվել ցանկացած Java API-ից։

API-ի օգտագործումը կարող է տատանվել կախված ծրագրավորման լեզվի տեսակից։ Օրինակ, Lua-ի նման պրոցեդուրալ լեզվի համար API-ն կարող է հիմնականում պարունակել հիմնարար ընթացակարգեր կոդի իրականացնելու, տվյալները կառավարելու կամ սխալներ շտկելու համար, մինչդեռ Java-ի նման օբյեկտ-առարկայական լեզվի API-ն կտրամադրի դասերի և դրանց մեթոդների նկարագրություն։ Հիրումի օրենքը նշում է, որ «API-ի բավականաչափ մեծ թվով օգտատերերով, չի կարևորում, թե ինչ ես խոստանում պայմանագրում՝ ձեր համակարգի բոլոր դիտվող վարքագծերը ինչ-որ մեկի կողմից կախված կլինեն»։ Միջդեռ, մի շարք ուսումնասիրություններ ցույց են տալիս, որ API օգտագործող մեծամասնության դեպքում կիրառվող API-ի փոքր մասն է օգտագործվում։

Մեկ լեզվի առանձնահատկություններն ու հնարավորությունները քարտեզագրելով մեկ այլ լեզվով ներդրված ինտերֆեյսի հետ՝ լեզվական կապը թույլ է տալիս մեկ լեզվով գրված գրադարանին կամ ծառայությանը օգտագործել մեկ այլ լեզվով մշակելիս։

SWIG և F2PY (Fortran-ից Python-ի միջերեսի ստեղծիչ) նման գործիքները հեշտացնում են նման միջերեսների ստեղծումը։

API-ն կարող է նաև կապված լինել ծրագրային շրջանակի հետ։ Շրջանակը կարող է հիմնված լինել մի քանի գրադարանների վրա, որոնք իրականացնում են մի քանի API-ներ, բայց API-ի սովորական օգտագործումից տարբեր, շրջանակի մեջ կառուցված վարքագծին հասանելիությունը միջնորդվում է շրջանակի բովանդակությունն նոր դասերով ընդլայնելու միջոցով։

Ի հավելումն, ընդհանուր ծրագրի հոսքը կարող է դուրս լինել զանգող կողմի վերահսկողությունից և գտնվել շրջանակի վերահսկողության տակ՝ վերահսկողության հակադարձման կամ նման մեխանիզմի միջոցով։

### Օպերացիոն համակարգեր
API-ն կարող է սահմանել հավելվածի և օպերացիոն համակարգի միջերեսը։ POSIX-ը, օրինակ, տրամադրում է API-ի ընդհանուր բնութագրերի մի շարք, որոնց նպատակն է հնարավորություն տալ POSIX համապատասխանող օպերացիոն համակարգի համար գրված հավելվածի կոմպիլյատորի մեկ այլ POSIX համապատասխան օպերացիոն համակարգի համար:

Լինուքսը և Berkeley Software Distribution-ը օպերացիոն համակարգերի օրինակներ են, որոնք իրականացնում են POSIX API-ները։

Մայքրոսոֆթը մեծ հավատարմություն է ցուցաբերել հետընթաց-համատեղելի API-ին, հատկապես իր Windows API (Win32) գրադարանում, այնպես որ ավելի հին հավելվածները կարող են աշխատել Windows-ի նոր տարբերակների վրա՝ օգտագործելով գործարկվող հատուկ պարամետրը, որը կոչվում է «Համատեղելիության ռեժիմ»։

API-ն տարբերվում է հավելվածի երկուական ինտերֆեյսից (ABI) նրանով, որ API-ն հիմնված է սկզբնական կոդերի վրա, մինչդեռ ABI-ն՝ երկուական: Օրինակ, POSIX-ը տրամադրում է API-ներ, մինչդեռ Լինքուքս ստանդարտ բազան տրամադրում է ABI։

### Հեռավոր API-ներ
Հեռավոր API-ները թույլ են տալիս մշակողներին կառավարել հեռավոր ռեսուրսներ հաղորդակցման պրոտոկոլների միջոցով, որոնք որոշակի ստանդարտներ են հաղորդակցության համար, որոնք թույլ են տալիս տարբեր տեխնոլոգիաների աշխատել միասին, անկախ լեզվից կամ հարթակից։ Օրինակ, Java Database Connectivity API-ն թույլ է տալիս մշակողներին հարցումներ անել տարբեր տեսակի տվյալների բազաների նկատմամբ նույն ֆունկցիաների միջոցով, մինչդեռ Java remote method invocation API-ն օգտագործում է Java Remote Method Protocol-ը՝ հեռավոր գործողությունների կանչման համար, որոնք, սակայն, մշակողի համար թվաբառարանային են թվում։

Հետևաբար, հեռավոր API-ները օգտակար են օբյեկտի կողմնորոշված ծրագրավորման մեջ օբյեկտի վերացականությունը պահպանելու համար. մեթոդի կանչը, որը կատարվում է լոկալ պրոքսի օբյեկտի վրա, կանչում է համապատասխան մեթոդը հեռավոր օբյեկտի վրա՝ օգտագործելով հեռակառավարման արձանագրությունը և ստանում է արդյունքը, որը կօգտագործվի տեղում որպես վերադարձի արժեք:

Պրոքսի օբյեկտի փոփոխությունը հանգեցնում է նաև հեռավոր օբյեկտի համապատասխան փոփոխությանը։

### Վեբ API-ներ
Վեբ API-ները ծառայություն են, որը հասանելի է հաճախորդի սարքերից (բջջային հեռախոսներ, դյուրակիր համակարգիչներ և այլն) դեպի վեբ սերվեր ՝ օգտագործելով Hypertext Transfer Protocol (HTTP): Հաճախորդի սարքերը հարցում են ուղարկում HTTP հարցման ձևով և պատասխան հաղորդագրությունով, սովորաբար, JavaScript Object Notation ( JSON ) կամ Extensible Markup Language ( XML) ձևաչափով: Մշակողները սովորաբար օգտագործում են վեբ API-ներ՝ այդ սերվերից տվյալ սերվերի որոշակի հավաքածուի համար հարցումներ անելու համար:

Սոցիալական մեդիայի տարածքում վեբ API-ները թույլ են տվել վեբ համայնքներին հեշտացնել բովանդակության և տվյալների փոխանակումը համայնքների և հավելվածների միջև: Այս կերպ, մեկ վայրում դինամիկ կերպով ստեղծվող բովանդակությունը կարող է տեղադրվել և թարմացվել համացանցում մի քանի վայրերում։ Օրինակ՝ Twitter-ի REST API-ն ծրագրավորողներին թույլ է տալիս մուտք գործել Twitter-ի հիմնական տվյալներ, իսկ Search API-ն ծրագրավորողների համար տրամադրում է մեթոդներ՝ փոխազդելու Twitter-ի որոնման և միտումների տվյալների հետ։

## Ձևավորում
API-ի նախագծումը էական ազդեցություն ունի դրա օգտագործման վրա։ Նախևառաջ, ծրագրավորման ինտերֆեյսների ձևավորումը ներկայացնում է ծրագրային ապահովման ճարտարապետության կարևոր մասը, ծրագրային ապահովման բարդ մասի կազմակերպումը։ Տեղեկատվության թաքցման սկզբունքը նկարագրում է ծրագրավորման միջերեսների դերը որպես մոդուլային ծրագրավորման հնարավորություն՝ թաքցնելով մոդուլների իրականացման մանրամասները, որպեսզի մոդուլների օգտագործողները չհասկանան մոդուլների ներսում առկա բարդությունները։ Բացի նախորդ հիմքում ընկած սկզբունքից, API-ի օգտագործելիությունը չափելու այլ չափումներ կարող են ներառել այնպիսի հատկություններ, ինչպիսիք են ֆունկցիոնալ արդյունավետությունը, ընդհանուր ճիշտությունը և նորեկների համար սովորելիությունը։ Ֆաբրիկային մեթոդի օրինաչափությունը նույնպես բնորոշ է API-ների նախագծման մեջ՝ դրանց բազմակի օգտագործման բնույթի պատճառով։ Այսպիսով, API-ի նախագծումը փորձում է տրամադրել միայն այն գործիքները, որոնք օգտատերը ակնկալում է։

### Համաժամանակյա ընդդեմ անհամաժամանակյա
Դիմումների ծրագրավորման ինտերֆեյսը (API) կարող է լինել համաժամանակյա կամ անհամաժամանակյա։ Համաժամանակյա API կանչը դիզայնի այն օրինաչափությունն է, որտեղ կանչի տեղը արգելափակվում է, մինչ սպասում է կանչված կոդի ավարտին։ Այն դեպքում, երբ անհամաժամանակյա API կանչ կա, կանչի տեղը չի արգելափակվում, մինչ սպասում է կանչված կոդի ավարտին, և փոխարենը կանչողը տեղեկացվում է, երբ պատասխանը հասնում է։

## Թողարկման ձևեր
API-ները տեխնոլոգիական ընկերությունների ինտեգրման ավելի տարածված եղանակներից են: API-ներ տրամադրողները և օգտագործողները համարվում են բիզնես էկոհամակարգի անդամներ։

API-ի թողարկման հիմնական ձևերն են՝

* Մասնավոր․ API-ն նախատեսված է միայն ընկերության ներքին օգտագործման համար:
* Գործընկեր․ API-ն կարող են օգտագործել միայն կոնկրետ բիզնես գործընկերներ: Օրինակ, վարձակալության համար նախատեսված մեքենաները, ինչպիսիք են Uber-ը և Lyft-ը, թույլ են տալիս հաստատված երրորդ կողմի մշակողներին ուղղակիորեն պատվիրել երթուղիներ իրենց հավելվածներից: Սա թույլ է տալիս ընկերություններին իրականացնել որակի վերահսկողություն՝ ճշտելով, թե որ հավելվածներն ունեն մուտք դեպի API և նրանց տրամադրում է լրացուցիչ եկամուտների հոսք։
* Հանրային. API-ն հասանելի է հանրության կողմից օգտագործման համար: Օրինակ, Մայքրոսոֆթը հրապարակում է Windows API-ն, իսկ Էփլը թողարկում է իր API Cocoa-ն, որպեսզի ծրագրակազմը գրվի իրենց հարթակների համար: Ոչ բոլոր հանրային API-ներն են սովորաբար հասանելի բոլորի համար: Օրինակ՝ համացանցային ծառայություններ մատուցողները, ինչպիսիք են Cloudflare-ը կամ Voxility-ը, օգտագործում են RESTful API-ներ՝ թույլ տալու հաճախորդներին և վերավաճառողներին մուտք գործել իրենց ենթակառուցվածքի մասին տեղեկատվությունը, DDoS վիճակագրությունը, ցանցի կատարողականը կամ վահանակի կառավարումը։ Նման API-ների հասանելիությունը տրվում է կա՛մ «API-ի նշաններով», կա՛մ հաճախորդի կարգավիճակի վավերացումներով։

### Հանրային API-ի հետևանքները
Հանրային API-ի համար կարևոր գործոններից մեկը դրա «ինտերֆեյսի կայունությունն»է։ API-ին փոփոխություններ կատարելը՝ օրինակ, ֆունկցիայի կանչին նոր պարամետրեր ավելացնելը, կարող է խախտել համապատասխանությունը այն հաճախորդների հետ, որոնք կախված են այդ API-ից։

Երբ հրապարակայնորեն ներկայացված API-ի մասերը ենթակա են փոփոխման և, հետևաբար, կայուն չեն, որոշակի API-ի այդպիսի մասերը պետք է բացահայտորեն փաստաթղթավորվեն որպես «անկայուն»: Օրինակ, Գուգլ Guava գրադարանում այն մասերը, որոնք համարվում են անկայուն, և որոնք կարող են շուտով փոխվել, նշվում են Java-յի`@Beta`մեկնաբանությունոբ։

Հանրային API-ն երբեմն կարող է իր որոշ մասեր հայտարարել որպես *հնացած* կամ չեղյալ հայտարարել: Սա սովորաբար նշանակում է, որ API-ի մի մասը պետք է համարվի որպես թեկնածու հեռացման կամ փոփոխման հետ անհամատեղելի ձևով: Հետևաբար, այս փոփոխությունները ծրագրավորողներին թույլ են տալիս հեռանալ API-ի այն մասերից, որոնք հետագայում կհեռացվեն կամ չեն աջակցվի։

2020 թվականի փետրվարի 19-ին Akamai-ն հրապարակել է իրենց տարեկան «Ինտերնետի վիճակ» զեկույցը, որը ցույց տվեց կիբեռհանցագործությունների աճող միտումը հանրային API պլատֆորմների դեմ՝ ֆինանսական ծառայություններում ամբողջ աշխարհում։ 2017 թվականի դեկտեմբերից մինչև 2019 թվականի նոյեմբեր Akamai-ն հրապարակել է 85.42 միլիարդ հավատարմագրերի խախտման հարձակումներ։ Մոտ 20%-ը, կամ 16.55 միլիարդ, ուղղված են եղել API վերջնակետերի սահմանված անուններին։ Դրանցից 473.5 միլիոնը ուղղված էր ֆինանսական ծառայությունների ոլորտի կազմակերպություններին։

## Փաստաթղթեր
API փաստաթղթավորումը նկարագրում է API-ի առաջարկած ծառայությունները և դրանց օգտագործման եղանակները, նպատակ ունենալով ընդգրկել այն ամենը, ինչ անհրաժեշտ է հաճախորդին գործնական նպատակներով:

Փաստաթղթավորումը շատ կարևոր է API-ով աշխատող ծրագրերի մշակման և պահպանման համար։ API փաստաթղթավորումը ավանդաբար գտնվում է փաստաթղթավորման ֆայլերում, սակայն նաև կարելի է գտնել սոցիալական մեդիայում, ինչպիսիք են բլոգները, ֆորումները և հարց ու պատասխանի կայքերը։

Ավանդական փաստաթղթավորման ֆայլերը հաճախ ներկայացվում են փաստաթղթավորման համակարգերի միջոցով, ինչպիսիք են Javadoc կամ Pydoc, որոնք ունեն կայուն տեսք և կառուցվածք: Այնուամենայնիվ, փաստաթղթությունում ներառվող բովանդակության տեսակները տարբեր են API-ներից։

Ցուցակի հասկացողության համար, API փաստաթղթավորումը կարող է ներառել API-ում հասկացությունների և մեթոդների նկարագրություններ, ինչպես նաև «լիարժեք օգտագործման դեպքեր, կոդի նմուշներ, դիզայնի պատճառաբանություններ, կատարողականի քննարկումներ և պայմանագրեր», սակայն API ծառայությունների իրականացման մանրամասները սովորաբար բաց թողնվում են:

REST API-ի վերակացու փաստաթղթավորումը կարող է ավտոմատ կերպով ստեղծվել OpenAPI փաստաթղթից, որն է մեքենա ընթերցվող տեքստային ֆայլ, որն օգտագործում է OpenAPI Օրենքում սահմանված նախանշված ձևաչափ և սինտաքս: OpenAPI փաստաթուղթը սահմանում է հիմնական տեղեկություններ, ինչպիսիք են API-ի անունը և նկարագրությունը, ինչպես նաև նկարագրում է գործողությունները, որոնք API-ն տրամադրում է։

API-ի փաստաթղթերը կարող են հարստացվել մետատվյալներով, ինչպիսիք են Java ծանոթագրությունները: Այս մետատվյալները կարող են օգտագործվել կոմպիլյատորի, գործիքների և գործարկման ժամանակի միջավայրի կողմից՝ հատուկ վարքագծերը կամ հատուկ մշակումը իրականացնելու համար։

## API-ների հեղինակային իրավունքի պաշտպանության վերաբերյալ վեճ
2010 թվականին Oracle Corporation-ը դատի է տվել Գուգլին՝ Անդրոիդ օպերացիոն համակարգում ներդրված Ջավայի նոր ներդրումը տարածելու համար։ Գուգլը Java API-ն վերարտադրելու որևէ թույլտվություն չի ստացել, թեև թույլտվություն է տրվել նմանատիպ OpenJDK նախագծին: Գուգլը դիմել է Oracle-ին իրենց API-ի լիցենզիայի շուրջ բանակցություններ վարելու համար, սակայն մերժվել էր վստահության խնդիրների պատճառով: Չնայած անհամաձայնությանը, Գուգլն ամեն դեպքում նախընտրել է օգտագործել Oracle-ի կոդը:

Որոշումը չեղարկվել է 2014 թվականին՝ Դաշնային շրջանի վերաքննիչ դատարան դիմելու հիման վրա, թեև այն հարցը, թե արդյոք API-ների նման օգտագործումը արդար օգտագործում է, մնցել է չլուծված։

2016 թվականին, երկու շաբաթ տևած դատավարությունից հետո, ատենակալները որոշել են, որ Գուգլի Java API-ի կրկնօգտագործումը արդար օգտագործում է, բայց Oracle Corporation բողոքարկել է որոշումը։ Oracle Corporation-ը հաղթել է և Circuit-իAppeals Court-ը որոշել է, որ Գուգլի API-ների օգտագործումը չի համապատասխանում արդար օգտագործման պահանջներին։ 2019 թվականին Գուգլը բողոքել է ԱՄՆ-ի Գերագույն դատարան՝ հեղինակային իրավունքների և արդար օգտագործման վերաբերյալ վճիռների դեմ, և Գերագույն դատարանը համաձայնել է ուսումնասիրել գործը։ COVID-19 պանդեմիայի պատճառով դատական լսումները հետաձգվել են մինչև 2020 թվականի հոկտեմբեր։

Գործը վճռվել է Գերագույն դատարանի կողմից՝ հօգուտ Գուգլի՝ 6-2 որոշմամբ։ Դատավոր Սթիվեն Բրեյերը ներկայացրել է դատարանի կարծիքը և նշել,որ ՝ «հայտարարող ծածկագիրը, եթե ընդհանրապես ենթակա է հեղինակային իրավունքի, ավելին է, քան հեղինակային իրավունքի հիմքում ընկած համակարգչային ծրագրերի մեծ մասը»։

## Տես նաև
* Միջերես
* Շարահյուսական վերլուծություն (ինֆորմատիկա)

## Ծանոթագրություններ

## Հետագա ընթերցում
*  Argues that "APIs are far from neutral tools" and form a key part of contemporary programming, understood as a fundamental part of culture.
* What is an API?&nbsp;– in the U.S. Supreme Court opinion, *Գուգլ v. Oracle 2021*, pp.&nbsp;3–7&nbsp;– "For each task, there is computer code; API (also known as Application Programming Interface) is the method for calling that 'computer code' (instruction&nbsp;– like a recipe&nbsp;– rather than cooking instruction, this is machine instruction) to be carry out"
* Maury, Innovation and Change&nbsp;– Cory Ondrejka, February 28, 2014, " ...proposed a public API to let computers talk to each other". (Textise  URL)

## Արտաքին հղումներ
* Forrester: IT industry: API Case: Google v. Oracle – May 20, 2021&nbsp;– content format: Audio with text&nbsp;– length 26:41
* Geliştiriciler İçin API Listesi&nbsp;– Feb 23, 2024

Կատեգորիա:Ինֆորմատիկա
Կատեգորիա:Ծրագրային ապահովում
Կատեգորիա:Ծրագրային գրադարաններ
Կատեգորիա:Ծրագրավորում
Կատեգորիա:Տեխնիկական հաղորդակցություն
Կատեգորիա:Օպերացիոն համակարգեր