Az API (Application Programming Interface - Alkalmazásprogramozási Felület) egy olyan felület, amely kommunikációt és adatcserét tesz lehetővé két különálló rendszer között. Az API-t futtató rendszer számos olyan funkciót/alprogramot tartalmaz, amelyeket egy másik rendszer végrehajthat.
Az API meghatározza, hogy milyen kéréseket küldhetünk a kiszolgálónak és milyen válaszokat adunk a felhasználónak, továbbá meghatározza még a kérések módját, a válasz formátumát is.
Vizsgáljuk meg egy éttermi példán keresztül az API-t:
Egy pincér felveszi a rendelést a vendégtől, amelyet továbbít a szakácsnak. Miután a séf elkészítette a rendelést, a pincér felszolgálja az ételt a vendégnek.
Hasonlóképpen működik az API is. Egy API kérést kap egy alkalmazástól. Ezután interakcióba lép egy szerverrel/adatforrással, amely feldolgozza a kérést és összeállítja a választ, amelyet aztán visszaküld az alkalmazásnak.
Nézzünk pár további példát az API-ra:
Google Maps-ben útvonalat tervezünk és mikor megadjuk az indulási helyünket és úticélunkat, akkor az útvonaltervező elküld egy kérést a taxi vállalatnak, a két megadott címmel, majd jön a taxi cégtől a válasz, hogy mennyibe kerülne a fuvar és mennyi időt vesz igénybe az út:
Hasonlóan jó példa a booking.com, ahol a megadott feltételeink alapján összeállít az oldal egy kérést (például, hogy hova mennénk nyaralni, mettől-meddig mennénk oda) és elküldi a különböző hoteleknek, szállásadóknak a kérést, amik válaszként visszaadják, hogy milyen szobáik vannak az adott feltételeknek megfelelően.:
Mi az a REST API?
REpresentational State Transfer - azaz Reprezentációs állapotátvitel (ami nem hangzik túl szépen, ezért, szimplán REST-ként szoktak rá hivatkozni).
Ez egy állapotmentes (stateless) szoftver architektúra megoldás, ahol a meglévő webes standardokat használjuk ki az alkalmazás-alkalmazás kommunikációban a szerveren vagy kliensen tárolt objektumok állapotának átvitelére. Tipikusan a HTTP szabványban található szabályokat követi: HTTP státuszkódok, HTTP metódusok és HTTP fejléc kezelés.
A REST architektúrát megvalósító webszolgáltatásokat RESTful webszolgáltatásoknak nevezik. A RESTful API kifejezés általában a RESTful web API-kra vonatkozik. A REST API és a RESTful API kifejezéseket azonban felváltva használják.
De mi is az a HTTP?
Ha valaha is használtad az internetet, akkor biztosan tudod vagy van sejtésed arról hogyan működik.
A gépünkről, telefonunkról kéréseket küldünk és adatokat fogadunk a távoli szerverekről. Ez az internet dióhéjban.
Hogyan is valósulhat ez meg?
Úgy, hogy az összes netet használó eszköz ugyanazon a nyelven, ugyanazon a protokollon, azaz a HTTP-n ( Hyper Text Transfer Protocol) keresztül kommunikál.
A HTTP az a protokoll, amelyen az internet alapul. Lehetővé teszi a számítógépek számára a világ bármely pontjáról, hogy kéréseket küldjenek távoli szerverekre, és visszakapják a böngészőben megjeleníthető válaszokat.
Milyen előnyei vannak a REST API-nak?
Skálázhatóság
A REST API-kat megvalósító rendszerek hatékonyan méretezhetők, mivel a REST optimalizálja az ügyfél-szerver interakciókat. Az állapotmentesség megszünteti a szerver terhelését, mivel a kiszolgálónak nem kell megőriznie a korábbi ügyfélkérések adatait. A jól kezelt gyorsítótárazás részben vagy teljesen kiküszöböl néhány kliens-szerver interakciót. Mindezek a szolgáltatások támogatják a méretezhetőséget anélkül, hogy a kommunikációs szűk keresztmetszeteket okoznának, amelyek csökkentik a teljesítményt.
Rugalmasság
A RESTful webszolgáltatások támogatják a teljes kliens-szerver szétválasztást. Leegyszerűsítik és szétválasztják a különböző szerverösszetevőket, így mindegyik rész egymástól függetlenül fejlődhet. A kiszolgálóalkalmazás platform- vagy technológiai változásai nem érintik az ügyfélalkalmazást. Az alkalmazási funkciók rétegzésének lehetősége még tovább növeli a rugalmasságot. Például a fejlesztők az alkalmazáslogika átírása nélkül módosíthatnak az adatbázis rétegen.
Függetlenség
A REST API-k függetlenek a használt technológiától. Különféle programozási nyelveken írhatunk kliens- és szerveralkalmazásokat is anélkül, hogy ez befolyásolná az API tervezését. Mindkét oldalon módosíthatjuk a mögöttes technológiát a kommunikáció befolyásolása nélkül.
A REST API alapelvei
Egységes felület
Az egységes felület alapvető fontosságú bármely REST webszolgáltatás tervezésénél. Annyit tesz, hogy a szerver egy szabványos formátumban továbbítja az információkat. A formázott erőforrást REST-beli reprezentációnak nevezik. Ez a formátum eltérhet az erőforrás belső megjelenítésétől a szerveren. Például a szerver tárolhat adatokat szövegként, de formázhatja azt és elküldheti HTML formátumban.
Az egységes felületnek négy architekturális megkötése van:
- Erőforrások azonosítása: A kéréseknek meg kell határozniuk az erőforrásokat. Ez egységes erőforrás-azonosító használatával történik.
- Erőforrások módosítása a reprezentációkon keresztül: amikor egy kliens megkapja egy erőforrás reprezentációját, beleértve a csatolt metaadatokat is, akkor elegendő információval rendelkezik az erőforrás módosításához vagy törléséhez a kiszolgálón, ha rendelkezik erre engedéllyel.
- Önleíró üzenetek: minden üzenet elegendő információt tartalmaz annak feldolgozásához. Ez annyit tesz, hogy a kliens meghatározza a kérésben, hogy az milyen típusú (például: lekérdezés, törlés vagy módosítás) és a szerver válasza is tartalmazza, hogy az milyen típusú választ adott (például: egyszerű szöveg, HTML, kép, stb.).
- Hipermédia: a kliensek információt kapnak minden egyéb kapcsolódó erőforrásról, amelyre egy feladat elvégzéséhez szükségük van. A szerver ezt úgy éri el, hogy hiperhivatkozásokat küld a válaszokban, így a kliensek dinamikusan több erőforrást érhetnek el. A kliensnek csak az alkalmazás kezdeti URL-jével kell rendelkeznie. Az alkalmazásnak pedig dinamikusan kell továbbítania az összes többi erőforrást és interakciót a hiperhivatkozások használatával. Vegyünk például egy webshopot, amitől egy kérésben lekérjük az összes terméket. A válaszban pedig megkapjuk a termékeket és azt a linket is, amivel az egyes termékek részleteit kérhetjük le.
Gyorsítótárazhatóság
A RESTful webszolgáltatások támogatják a gyorsítótárazást, amely segíti a szerver válaszidejének gyorsítását. Tegyük fel például, hogy felkeres egy weboldalt, amelynek minden oldalán közös fejléc és lábléc található. Minden alkalommal, amikor meglátogat egy új weboldalt, a szervernek újra el kell küldenie ugyanazokat a fejléceket, képeket, stb. Ennek elkerülése érdekében a kliens az első válasz után gyorsítótárba helyezi vagy eltárolja ezeket a tartalmakat, majd közvetlenül a gyorsítótárból használja azokat ezáltal javítva a válaszok sebességét.
Réteges felépítés
A réteges felépítés lehetővé teszi az alkalmazások stabilabbá tételét az összetevők viselkedésének szabályozásával. Ez a fajta architektúra segít az alkalmazás biztonságának fokozásában, mivel az egyes rétegek összetevői nem tudnak kölcsönhatásba lépni a következő közvetlen rétegen túl. Ezen kívül lehetővé teszi a terheléselosztást, és megosztott gyorsítótárakat biztosít a skálázhatóság elősegítése érdekében.
Igényelt kód
A szerverek ideiglenesen bővíthetik vagy testre szabhatják az ügyfélfunkciókat azáltal, hogy kódot visznek át a kliensre. Például, amikor kitöltünk egy regisztrációs űrlapot bármely webhelyen, a böngésző azonnal validálja és kiemeli az általad elkövetett hibákat, például a helytelen telefonszámokat. Ezt a szerver által küldött kód miatt tudja megtenni.
A kliens és a szerver szétválasztása
REST-ben a kliens és a szerver implementációja egymástól függetlenül is elvégezhető anélkül, hogy tudnának a másikról. Ez azt jelenti, hogy a kliens oldali kód bármikor megváltoztatható anélkül, hogy ez a szerver működését befolyásolná, a szerver oldali kód pedig a kliens működésének befolyásolása nélkül.
Addig, amíg mindkét fél tudja, hogy milyen formátumú üzeneteket küldjön a másiknak, azok modulárisak és elkülöníthetők. A felhasználói felület és az adattárolási szempontok elkülönítésével javítjuk a felület rugalmasságát a platformok között, és javítjuk a méretezhetőséget a szerverkomponensek egyszerűsítésével. Ezenkívül az elválasztás lehetővé teszi, hogy az egyes komponensek egymástól függetlenül fejlődjenek.
A REST felület használatával a különböző ügyfelek ugyanazokat a REST-végpontokat érik el, ugyanazokat a műveleteket hajtják végre, és ugyanazokat a válaszokat kapják.
Állapotmentesség
A REST paradigmát követő rendszerek állapot nélküliek, ami azt jelenti, hogy a szervernek semmit sem kell tudnia arról, hogy a kliens milyen állapotban van, és fordítva. Ily módon a szerver és a kliens is megérti a kapott üzeneteket, még akkor is, ha nem látja a korábbiakat.
A cikk második részében rátérünk arra, hogyan is működik a REST API. Folytatjuk…