API

**Аппликейшн програмчлалын интерфейс (API)** буюу **АПИ** нь нэг аппликейшн хэрхэн өөр аппликейшнтэй харилцан ажиллахыг тодорхойлох дүрмийн олонлогийг агуулдаг. Үүнд програм хангамжийг байгуулах хэрэгслүүд, протоколууд, subroutine-ууд агуулагдана. Сайн аппликейшн программчлалын интерфейс (API) нь бүх жижиг хэсгүүдийн байгуулалтыг харгалзан үзсэнээр программ хангамжийг бүтээх ажлыг хялбаршуулж өгдөг. API нь маш олон form (хэлбэр)-ыг тодорхойлж болно. Гэхдээ ихэвчлэн routines (зорилгын дараалал), өгөгдлийн бүтцүүд, объект классууд, хувьсагчуудыг оруулж тодорхойлдог. Олон төрлийн API байдаг бөгөөд жишээ нь: POSIX, Microsoft Windows API, C++ стандарт сангууд ба  Жава API.  API-гийн эрх зүйн байдал нь оюуны өмчийн хуулийн тал дээр маргаантай байдаг.
АПИ нь үндсэн хоёр ашиг тусыг авчирдаг:
*Хялбаршуулах давхаргаар хангах замаар нарийн төвөгтэй байдлыг нуух 
*Стандартчилал

### Аппликейшн хоорондын харилцан ажиллагаа 
Үндсэндээ, энэ нь нэг аппликейшн өөр аппликейшнын эзэмшиж буй өгөгдөлтэй холбогдох эсвэл аппликейшн руу өгөгдөл илгээх үед тохиолддог. Өөр нэг харилцаа нь нэг аппликейшн өөр сервист хүсэлт илгээх үед байж болно. АПИ нь хэрэглэгчийн харилцааг биш, software-to-software харилцааг хангаж өгдөг. АПИ-гаар программ хангамжууд ямар нэг хэрэглэгчийн мэдлэг оролцоогүйгээр хоорондоо харилцдаг. Үүнийг маш энгийнээр тайлбарлах юм бол, жишээ нь та онлайнаар кино тасалбар захиалбал кино тасалбар захиалгын веб сайт таны картны мэдээллийг удирдаж байгаа аппликейшины илгээсэн АПИ-г ашиглан  картны мэдээлэл тохирч байгаа эсэхийг шалгана. ө.х та нэг л интерфейсийг буюу кино захиалгын хуудсыг харж байхад ард нь маш олон аппликейшнууд АПИ-г ашиглан хамтдаа ажиллаж байдаг ба нэгтгэлийн энэ хэлбэрийг seamless буюу үл үзэгдэлт гэж нэрлэдэг. Энэ мэтээр программ хангамжийн функцүүд нэг аппликейшнээс нөгөөрүү шилжиж байх үед хэрэглэгчид хэзээ ч үүнийг анзаардаггүй.

## Зорилго
График хэрэглэгчийн интерфэйс нь хэрэглэгч программ ашиглахад илүү хялбар болгодог шиг, аппликейшн программчлалын интерфэйс нь хөгжүүлэгчид аппликейшнд суурилсан технологи хийхэд хялбар болгодог. 

## Хэрэглээ
**Сангууд болон тогтолцоонууд**

API-гийн программ хангамжийн сан нь ихэнхдээ олон төрөлтэй байдаг:  API нь адил программчлалын интерфэйстэй өөр сангуудаас олон төрлийн формын хэрэгжүүлэлтийг авч ажиллаж чаддаг. Бусад сангийн адил ямар нэг хэл дээр бичигдсэн программыг API салган авч хэрэгжүүлэхийг зөвшөөрдөг. Жишээ нь: скала болон жава  хөрвүүлэгчид нь байт код дээр ажилладаг ба скала хөгжүүлэгчдийн давуу тал нь ямар ч жава API-г ашиглаж чаддаг. API нь ямар ч программчлалын хэл байсан өөрчилж чаддаг. API нь LUA горимын хэл бөгөөд ерөнхий код, нарийн төвөгтэй өгөгдлүүд, алдаанууд, жавагийн обьект хандалтат хэлний ангиудын шинж чанар ба классын гишүүд зэргээс бүрдэнэ.API нь бас хэлний үүрэгтэй интерфэйс хийхэд  фортранаас python интерфейсийг, мөн SWIG ба F2PY түүлийг ашигладаг. API нь программ хангамжын фрэймворкыг төрөлжүүлж чаддаг: Фрэймворк нь өөр өөр API-г өөр өөр сангуудтай  ерөнхийд нь хэрэгжүүлж чаддаг бөгөөд идэвхтэй төлөвт байгаа классын агууллагыг өөртөө удамшуулцж авч чаддаг. 
 
## Үйлдлийн систем 
API нь үйлдлийн систем ба аппликейшн хоёрын хоорондох онцлогийг гаргадаг. Ерөнхий гурван хэрэглээний программын холбоос бол Windows үйлдлийн системийн WIN32 API, POSIX-ийн үндсэн суурь систем (үүнд: UNIX LINUX-ийн дэвшилтэт хувилбарууд болон MAC-OS-X орно)-ийн POSIX API мөн JAVA виртуаль машины загварын программ болох жава API байна. POSIX-ийн жишээ нь: API нь POSIX дээр бичсэн кодыг аль нэг үйлдлийн систем дээр шалгаад дараа нь өөр үйлдлийн систем дээр ч ажиллах боломжтой болгох юм. Linux болон Berkeley Software Distribution POSIX API-уудыг хэрэгжүүлэх үйлдлийн системүүдийн жишээ юм. API-ийн онцлог нь эх код нь хоёртын интерфейс аппликейшн буюу ABI-д суурилсан байдаг. Жишээ нь POSIX API-тай нийцдэг бол Linux Standard Base нь хоёртын интерфейс аппликейшнтай нийцдэг. 

## Жава API
Жава маш олон бэлэн бэлдсэн ангиудтай байдаг ба тэдгээрийг жава API гэнэ. Эдгээр ангиийг хэд хэдэн Package (багц)-д хуваарилсан байдаг. Package-ууд нь өөрсдийн гэсэн нэртэй байх ба жишээ нь javax.swing энэ package нь Swing GUI-ийн ангиудыг агуулдаг. Мөн java.util гэж маш хэрэгтэй ultilities буюу хэрэгслүүдийн package байдаг. Ер нь бол эдгээр бэлэн class-уудыг ашиглахдаа package-г дуудаж оруулах эсвэл зүгээр package-ийн нэрийг бичээд ард нь ангийн нэрийг бичсэнээр ашиглах боломжтой.  System, String, Math зэрэг нь java.lang package-д багтдаг (java.lang package нь жавагаас цаанаас нь автоматаар орж ирсэн байдаг). 
Жишээ нь : String обьект нь тэмдэгт стрингтэй ажиллахад хэрэг болох стейт, бихэвиорыг; File обьект нь программчид файлсистем дээр хялбархнаар файл үүсгэж, устгаж, шалгаж, харьцуулж, өөрчлөх боломж олгодог; Socket обьект нь сүлжээний сокетуудыг үүсгэж, хэрэглэх боломж олгодог; олон янзын GUI обьектын контролууд нь янз бүрийн товчнууд, чекбоксууд болон графикан юзер интерфейстэй холбоотой өөр юу л байна бараг цөмийг нь агуулсан байдаг. Үнэндээ сонголт хийж болох мянга мянган классууд энэ санд бий. Эдгээрийг ашигласнаар программч тухайн аппликейшны дизайнд л анхаарах боломжтой болох бөгөөд харин түүнийг ажиллуулах (далд орших, доорх) дэд бүтцэд нэг их анхаараад байх шаардлагүй болдог.

Жавагийн Жава Платформ АПИ Тодорхойлолтуудын Лавлах ньЖава Платформ 6, Стандарт Эдишинтэй дагалдах бүх пакажууд, интерфейсүүд, классууд, фийлдүүд (fields), методуудын тухай тайлбар, тодорхойлолтыг агуулсан байдаг.

## Pthread Api
Thread (Хуулбар) сан нь программчид хуулбарыг үүсгэх болон удирдахад зориулсан API –аар хангадаг. API –д байгаа санд зориулсан функц дуудалт нь ерөнхийдөө кернел рүү систем дуудлага хийж таардаг.Жава хуулбар API нь хуулбар үүсгэлт болон удирдлага, тохируулгыг шууд жава программаас хий боломжийг олгодог. Гэвч ихэнхдээ JVM нь хостын үйлдлийн систем дээр ажилладаг болохоор Java thread API нь ерөнхийдөө хостын системд байгаа байгаа thread сангуудыг ашиглан суурилагддаг. Энэ нь Windows системд , жава хуулбарууд нь нь Win32 ашиглаж суурилагдана гэсэн үг. Unix болон linux нь голцуу Pthreads- ыг ашигладаг.

## Дизайн
API-ийн загвар нь хэрэглээнд маш чухал ач холбогдолтой. Программын интерфейсийн үүрэг нь мэдээллийг нууцлан бичих бөгөөд ажиллах зарчим нь хэрэглэгчийн мэдэх шаардлагагүй программын нарийн төвөгтэй модулиудыг нууцлах боломж олгодог. Тиймээс API загвар нь хэрэглэгчийн хүлээгдсэн цорын ганц хэрэгсэл юм. Программын интерфейсийн загвар нь программ хангамжийн чухал хэсэг бөгөөд программ хангамжийн байгууламжийн цогц хэсэг юм. Иошуа Блок зэрэг хэд хэдэн зохиогч API-г хэрхэн зохион байгуулах талаар зөвлөмж гаргасан байдаг. 

## Алсын API 
Жава SDK-д алсын аппликейшн интерфейс дуудалт гэж байдаг. Энэ нь апп төхөөрөмжийн сервисээс ямар ч жава аппликейшнд хүссэн үйлчилгээгээ авах боломжийг олгодог.
Алсын API хөгжүүлэгчид нь хэлээс үл хамааран харилцаа холбооны тодорхой стандартыг ашиглан өөр технологиуд дээр хамтран ажиллах боломж олгодог. Гэхдээ прокси обьект дээр нь өөрчлөлт хийвэл алсын обьект дээр хүртэл өөрчлөлт хийх шаардлага гардаг. 

## Веб API 
Веб API интерфейсын тодорхойлолт нь компани болон аппликейшнүүдийн хоорондох харилцан үйлчлэлийг харуулдаг. Веб аппликейшн хийхэд HTML/ CSS/ Javascript гурвал нь хэрэглэгчийн интерфейс, Ruby ба Python хэл сервер хэсгийг хийхэд илүү өргөн хэрэглэгдэх болсон. Гар утасны хувьд бидний сайн мэдэх iOS ба Android хэрэглэдэг. Мөн томоохон агентлагуудын дунд WebGL -ийг сонирхон хэрэглэх нь эрс нэмэгдсэн.

## Бодлого 
API технологийн компаниуд өөр хоорондоо нэгтгэх хамгийн түгээмэл нэг арга байдаг.  
API-г гаргах гол бодлого нь: 
*Хамгаалалт: API-г зөвхөн компанийн дотоод ажилчид хэрэглэнэ.  
*Хамтрагч: Зөвхөн тодорхой бизнесийн түншүүд API ашиглаж болно. Жишээ нь  Uber болон Lyft зэрэг машины үйлчилгээний  компаниуд нь үйлчлүүлэгчдэд автомашины захиалга өгөхдөө шууд аппликейшнээс өгөхийг зөвшөөрдөг. 
*Нээлттэй: API – г бүх хэрэглэгчид ашиглах боломжтой. 

## Зохиогчийн эрх болон маргаан 
2010 онд Oracle Corporation Android үйлдлийн систем суулгагдсан Java шинэ хэрэгжилтийг тараасан учир Google-ийг шүүхэд өгсөн. Google JavaApi-г хуулбарлах ямар  нэгэн зөвшөөрөлгүй байсан хэдий ч OpenJDK-тай адил төсөл боловсруулсан. Шүүгч Уильям Alsup Oracle-ын талд ялалтыг өгсөн хэдий ч google-ийн энэ үйл явдлаас шалтгаалан программ хангамжийн хуулбарын талаар тушаалуудыг өргөн барьсан байдаг.

## Холбоос 
* https://web.archive.org/web/20141220065126/http://as.wiley.com/WileyCDA/WileyTitle/productCd-EHEP002013.html  --> Operating system concepts 9th edition