Ohjelmointirajapinta

Ohjelmointirajapinta () on raja komponenttien/moduulien välillä ohjelmoitavassa järjestelmässä.

Ohjelmointirajapinta on määritelmä, jonka mukaan eri ohjelmat voivat tehdä pyyntöjä ja vaihtaa tietoja eli keskustella keskenään. Esimerkki rajapinnasta on käyttöjärjestelmän rajapinta, jolla ohjelmat voivat käyttää keskusmuistia sekä tiedostoja.

Ohjelmontirajapinnat voivat toimia ohjelmien välillä tai ohjelmien ja laitteiston välillä (esimerkiksi BIOS). Ohjelmointirajapinnan tunnusmerkkeihin kuuluvat joukko toimintoja syötteiden ja tulosteiden määrittäminä sekä mahdollisuus muuttaa toteusta ilman häiriötä sen käyttäjille.

Historia 
Keskeisessä osassa ohjelmointirajapintojen syntyä on Maurice Wilkesin, David Wheelerin ja Stanley Gillin työ EDSAC-tietokoneen parissa. 
Aiempi John von Neumannin ja Herman Goldstinen työ käsitteli aihetta hyvin yleisellä tasolla.
Wilkesin havaittua ensimmäisen ei-triviaalin ohjelman yhteydessä käyttävänsä jatkossa huomattavasti aikaa ohjelmien debuggaukseen tunnistettiin tarve uudelleen käytettäville alirutiineille. EDSAC:lla ei ollut vielä kilpailevia arkkitehtuureita, ei edes toista samanlaista tietokonetta eikä ennestään ollut olemassa vanhoja tuettavia ohjelmia, mutta se oli varhainen käsitteen syntyyn vaikuttanut askel.
Ensimmäinen termin application programming interface käyttö liitetään vuoden 1968 artikkeliin Data Structures and Techniques for Remote Computer Graphics.

Kuvaus 

Kirjastojen kanssa ohjelmointirajapinta määrittää, miten ohjelma kutsuu kirjastoa. Ohjelmistokehyksen kanssa ohjelmointirajapinta määrittää, miten kehys kutsuu ohjelmaa. Dokumentointi on keskeinen osa rajapintaa.

Yksi ohjelmointirajapinnan päätarkoituksista on tarjota käyttömahdollisuus yleisimmille toiminnoille. Käyttöliittymä voi esimerkiksi tarjota ohjelmointirajapinnan ikkunoiden tai kuvakkeiden piirtoon, ja tietokanta taas rajapinnan kyselyiden läpiviemiseksi. Ohjelmointirajapinta liitetään hyvin usein osaksi SDK:ta (Software development kit).

Hyvä ohjelmointirajapinta sisältää kapseloinnin, jonka avulla ohjelmoijan ei tarvitse tietää rajapinnan alaisista menetelmistä. Tämän avulla rajapinta voidaan pitää "alaspäin yhteensopivana", eli ohjelmointirajapinnan toimintaa voidaan tehostaa ilman, että ohjelma, joka käyttää rajapintaa, häiriintyisi siitä.

Ohjelmointirajapintojen julkaisukäytännöistä erottuu kolme erilaista tapaa:

 Ohjelmointirajapintaa ei julkaista (yksityinen)
 Rajapinta julkaistaan tietyin rajoituksin (yhteistyökumppanit)
 Täysin tai lähestulkoon avoin ohjelmointirajapinnan julkaisu (julkinen)

POSIX on esimerkki standardoidusta rajapinnasta, jonka kuvaus on avoimesti saatavilla ja useiden valmistajien tukema.
Useiden pelikonsolien ohjelmointirajapinnat ovat saatavilla vain lisensoiduille tahoille.
Suljettuja rajapintoja on käytössä kaupallisissa ohjelmistoissa, joissa ne ovat vain kehittäjätahon tiedossa.

Käytännössä järjestelmä voi sisältää kaikkia kolmea, esimerkiksi kaupallisessa käyttöjärjestelmässä on vain kehittäjien tiedossa olevia rajapintoja, yhteistyökumppaneille avattuja rajapintoja sekä julkisia rajapintoja sovelluskehittäjille.

Kiistat 
Rajapinnat ovat keskeisessä osassa kiistaa Oraclen ja Googlen välillä jälkimmäisen Java-toteutukseen liittyen. Yhdysvaltain korkeimman oikeuden päätöksessä rajapintojen käyttö ei rikkonut tekijänoikeuslakia. Päätöksessä todettiin, että jos Oracle saisi rajoittaa rajapintojensa käyttöä se olisi haitallista ja rajoittaisi uusien ohjelmistojen kehittämistä. Vuonna 2021 ratkaistu kiista on ollut käynnissä vuodesta 2010 lähtien.

Katso myös 
 ABI (Application binary interface)

Lähteet

Aiheesta muualla 
 A Brief, Opinionated History of the API 
 How to Design a Good API and Why it Matters (PDF) 
 How Do I Make This Hard to Misuse? 
 What If I Don't Actually Like My Users? 
 avoinrajapinta.fi: Avoimen rajapinnan määritelmä 

Ohjelmointirajapinnat
Seulonnan keskeiset artikkelit