Et API definerer hvilke data og funksjoner et datasystem eksponerer, og hvordan eksterne datasystemer kan benytte dem. API-ene utgjør kontaktflatene mellom systemene og sikrer at kommunikasjonen mellom dem foregår på en trygg og forutsigbar måte. API-er er primært utviklet for bruk av annen programvare, selv om utviklere og teknisk kompetente brukere også kan aksessere dem direkte.

Faktaboks

Etymologi

forkortelse for det engelske begrepet Application Programming Interface

Også kjent som

applikasjonsgrensesnitt

Direkte oversatt til norsk blir Application Programming Interface (API) til applikasjonsprogrammeringsgrensesnitt. Som vi ser, er ordet sammensatt av tre begreper, applikasjon, programmering og grensesnitt, og indikerer at grensesnittet til dataprogrammet er tiltenkt andre dataprogrammer.

Grensesnitt er ikke unikt for dataprogrammer. De finnes overalt, og beskriver kontaktflaten mellom to kommuniserende parter, enten det dreier seg om en stikkontakt og et støpsel, der støpselets pinner må passe til hullene i kontakten, eller et bryterpanel på en vaskemaskin der vi velger vaskeprogram. I datasammenheng har vi såkalte brukergrensesnitt som muliggjør samhandling mellom brukeren og dataprogrammet. Disse består gjerne av ulike komponenter som tekstfelt, knapper og menyer. Et API er imidlertid et grensesnitt, der den menneskelige brukeren er erstattet av et annet dataprogram. Interaksjonen foregår med andre ord mellom to dataprogrammer, der ene programmet ønsker å benytte tjenestene det andre programmet kan tilby. Oppsummert er et brukergrensesnittutviklet for kommunikasjon mellom mennesker og dataprogrammer, mens et API er utviklet for kommunikasjon mellom dataprogrammer.

Formål og bruksområder

En av de viktigste formålene med et API er at ulike datasystemer kan nyttiggjøre seg av hverandres funksjonalitet. Istedenfor å bygge alt fra bunnen av kan utviklere hente data og tjenester fra andre systemer og bygge videre på dem. For eksempel kan en nettbutikk benytte seg av Vipps som betalingsløsning, istedenfor å utvikle sin egen, og skal du lage en mobilapp som trenger værdata, kan du benytte deg av API-et til Meteorologisk institutt. Dette gir både økt effektivitet, lavere utviklingskostnader og redusert risiko for feil.

Utveksling av data og tjenester via API-er er svært utbredt i så godt som alle typer programvare, alt fra operativsystemer til store språkmodeller og andre former for kunstig intelligens. Ikke bare mellom ulike virksomheter, men også mellom komponenter og tjenester internt i samme system, som for eksempel systemer basert på mikrotjenestearkitektur.

Å kunne integrere og programmere mot API-er er derfor en sentral kompetanse innen de fleste typer programvareutvikling.

Sikkerhet

Når vi bruker en nettbank, har vi som bankkunder ikke tilgang til hele banksystemet. Vi kan f.eks. ikke selv justere renten eller ta ut penger fra andres kontoer. Vår aktivitet er begrenset til utvalgte transaksjoner og operasjoner på våre egne kontoer. På samme måte som en bankkunde bare har tilgang til et begrenset utvalg funksjoner i nettbanken, gir et API vanligvis bare tilgang til utvalgte data og tjenester i et datasystem. API-et kan andre ord fungere som en sikkerhetskontroll, der autentisering og tilgangsregler avgjør hvem som får tilgang til ulike data og tjenester. Dermed kan systemet beskyttes mot uønsket bruk og manipulering.

API-dokumentasjon

Når mennesker kommuniserer seg imellom, kan vi gjerne formulere det samme budskapet på ulike måter og likevel bli forstått. I kommunikasjonen mellom dataprogrammer er det annerledes. Her må kommunikasjonen følge strenge og entydige regler slik at det ikke er rom for ulike tolkninger. API-dokumentasjonen beskriver disse reglene, hvilke forespørsler som er tillatt, hvordan de skal utformes, i hvilket format svaret vil være, hva de ulike statuskodene betyr, samt eventuelle begrensninger i bruken av API-et.

Klient/tjener-prinsippet

Image
Figuren viser kommunikasjonsflyten mellom klient og tjener.
API-figur
Lisens: CC BY SA 3.0

Kommunikasjonen mellom dataprogrammene følger det såkalte klient/tjener-prinsippet, også kjent som klient-server-arkitektur. Klienten sender forespørsler til tjeneren (eng. server) gjennom API-et som tjeneren tilbyr.

Samhandlingen kan sammenlignes med et restaurantbesøk. Gjesten bestiller mat ved hjelp av restaurantens meny og servitør. Servitøren formidler bestillingen til kjøkkenet, og når maten er klar, serveres den til gjesten. I denne analogien tilsvarer gjesten klienten og kjøkkenet tjeneren. Menyen kan sammenlignes med API-et, fordi den beskriver hvilke tjenester som er tilgjengelige og hvordan de kan bestilles. På samme måte som gjesten bare kan bestille retter som står på menyen, kan klienten bare sende forespørsler som API-et er utformet for å håndtere.

Forespørselen (request)

Image
Eksempel på en API-forespørsel som henter temperaturdata for Oslo fra meteorologisk institutt.
API-forespørsel
Lisens: CC BY SA 3.0

En API-forespørsel er bygget opp av ulike komponenter og følger gjerne en fast struktur. Noen av dem må alltid være med, mens andre er spesifikke for enkelte forespørsler,

  • Endepunktet: Nettadressen (URL) der tjeneren mottar forespørselen.
  • Handlingen: (HTTP-metoder) som angir hva du vil gjøre med dataene. Vanlige metoder er: GET (henter data), POST (oppretter nye data), PUT eller PATCH (oppdaterer eksisterende data) og DELETE (sletter data).
  • Hoder (headere): Inneholder eventuell nødvendig tilleggsinformasjon som hjelper tjeneren til å forstå forespørselen, informasjon som innholdsformat, dvs. formatet til dataene som sendes med forespørselen, ønsket svarformat og API-nøkkel for autentisering.
  • Meldingskropp: Dataene som sendes med forespørselen.
  • Parametere: Tilleggsinformasjon som spesifiserer forespørselen, som for eksempel hvor mye data svaret skal inneholde eller på hvilken måte det skal presenteres.

Svar (respond)

Image
Svar fra meteorlogisk institutt i JSON-format med temperaturdata for Oslo,
API-svar
Lisens: CC BY SA 3.0

For at klientprogrammet skal kunne å hente ut data på en trygg og forutsigbar måte, følger også svaret en fast struktur.

  • Statuskoder: Heltallskode som beskriver utfallet av forespørselen, som for eksempler 200 (OK), 201 (Opprettet), 400 (Feil forespørsel), 401 (Uautorisert/krever innlogging), 404 (Ikke funnet), 500 (Tjenerfeil).
  • Responshoder: metadata som blant annet gir opplysning om svarformat, tidspunkt og tjeneren dvs. programvaren som genererte svaret.
  • Responskropp: Selve svaret på forespørselen, gjerne i form av et JSON-objekt eller i XML (eldre systemer).

Standarder

Etter hvert som flere og flere datasystemer kommuniserer med hverandre, baserer mange leverandører seg på standardiserte måter å lage API-er. Dette gir forutsigbar kommunikasjon, effektiv datautveksling og god verktøystøtte på tvers av plattformer.

  • REST (Representational State Transfer) er den vanligste arkitekturstilen for HTTP-baserte API-er. Den bruker nettadresser (URL-er), følger klient/tjener-prinsippet, og tilbyr enkle handlinger som å hente, lage, endre og slette data.
  • JSON (JavaScript Object Notation) er et enkelt strukturert tekstformat for lagring og utveksling av data.
  • SOAP (Simple Object Access Protocol) er en eldre, mer formell protokoll som bruker XML. Den brukes fortsatt i banker og andre bedrifts- og finanssystemer, der sikkerhet og kontroll er avgjørende.
  • GraphQL (Graph Query Language) er et spørrespråk og et kjøremiljø for API-er der klienten kan be om akkurat de dataene den trenger i én forespørsel. Dermed unngås unødig datatrafikk. Det er mye brukt i mobilapplikasjoner (apper), men også av webapplikasjoner.
  • gRPC er et RPC-rammeverk (Remote Procedure Call). Det er mye brukt «bak kulissene» mellom mikrotjenester fordi det er effektivt, krever lite båndbredde og brukes sjeldent direkte fra nettleseren.

Synkrone og asynkrone API-er

Synkrone API-er fungerer som en høflig samtale mellom to parter, der ingen prater i munnen på hverandre. Klienten sender en forespørsel til tjeneren via API-et og venter så mens denne behandles. Først når svaret er mottatt, kan klienten jobbe videre. Denne typen API-er brukes gjerne i forbindelse med enkle oppgaver, som for eksempel innlogging.

Skal mer tidkrevende forespørsler behandles, vil asynkrone API-er være mer effektive. For hver forespørsel får klienten en melding om at forespørselen er mottatt og under behandling, mens svaret gjerne kommer senere. I ventetiden blir ikke klienten blokkert, men kan fortsette arbeidet sitt i påvente av svaret. Denne typen API-er er spesielt egnet for mer kompliserte forespørsler der store datamengder skal overføres, som for eksempel bildeopplastninger og videooverføring.

Åpne, freemium eller kommersielle API-er

Det finnes mange API-er som kostnadsfritt gir andre datasystemer tilgang. Spesielt innenfor offentlig virksomhet og åpen kildekode er det vanlig. Andre API-er (freemium-modeller) tilbyr grunnleggende tjenester gratis, men krever betaling for mer avanserte tjenester, som f.eks. sanntidsdata. I tillegg har vi rene kommersielle selskaper som utvikler programvare kun rettet mot andre datasystemer der de tilbyr sine data og tjenester via API-ene. Spesielt innen finans er dette vanlig. Markedet for denne typen API-er er stort, da det forenkler utvikling av ny programvare.

Les mer i Store norske leksikon

Kommentarer

Kommentarer til artikkelen blir synlig for alle. Ikke skriv inn sensitive opplysninger, for eksempel helseopplysninger. Fagansvarlig eller redaktør svarer når de kan. Det kan ta tid før du får svar.

Du må være logget inn for å kommentere.

eller registrer deg