Eszköztár
119 Kezdőlap - Webszerkesztés - PHP - REST API és JSON
ujdomainek.hu

REST API

és JSON

Jegyzet

A szoftverfejlesztő szakma vizsgakövetelményei mind frontend, mind backend oldalon megkövetelik a REST API ismeretét. Úgy is fogalmazhatunk, nemcsak dolgozni kell tudni egy-egy REST API kimenetéből, hanem készíteni is tudni kell ilyesmit. De mi is a REST API? Első lépésként nézzünk meg erről egy igen jól használható videót. Mint ahogyan a videóban is elhangzik, a REST API-tól visszakapott adatformátum leggyakrabban JSON lesz. Ennek megfelelően tekintsük meg JSON-t bemutató videót is! A videók tartalmát egyetlen ábrában összefoglalva az alábbiak szerint tudjuk: Ezek szerint a REST API használata a kliens oldali végpont felől egy URL-hívással indul. A REST API ezt követően (akár adatbázishoz is fordulva) összeállítja a válaszként küldendő adatokat, és ezeket tipikusan JSON (esetleg XML, vagy egyéb) formátumban adja vissza a kliensnek.

Nézzünk minderre néhány gyakorlati példát! 1. Random kutyaképek Az első példa egy meglehetősen egyszerű API. Alapvetően egy URL-t ad eredményül, ami egy véletlenszerűen választott kutyának a képét rejti. Az API elérése ezen a linken lehetséges:
https://dog.ceo/api/breeds/image/random
és most éppen ezt az eredményt adta vissza:
{"message":"https:\/\/images.dog.ceo\/breeds\/terrier-scottish\/n02097298_15174.jpg","status":"success"}
Ez egy JSON formátumú adat, amit a json_decode() függvénnyel dekódolva az alábbi tartalomhoz jutunk:
stdClass Object
(
    [message] => https://images.dog.ceo/breeds/terrier-scottish/n02097298_15174.jpg
    [status] => success
)
Ha a dekódolás eredményt pl. egy $adat nevű változóba mentjük, abból már használhatjuk a
$adat->message
kifejezést, hiszen ezzel érhetjük el a kép hivatkozását.
Ezt a kifejezést felhasználva, vagyis egy <img src='...'> tagbe helyezve már képként is megjeleníthetjük weblapunkon az eredményt - vagy éppen az alábbiak tanúsága szerint akár többet is:
A fentiek összefoglalásaként az alábbi kis képre kattintva megtekintheti a megvalósításhoz szükséges teljes forráskódot.
Hogy ennek mi értelme? Első ránézésre talán nem túl sok. Azonban ha picit jobban belegondolunk, egy készülő weboldalnak például a képmegjelenítő részét mindenképpen jó lehet vele tesztelni, hiszen folyamatosan nagyon különböző méretű és képarányú képet lehet vele megjeleníttetni saját tesztkép-gyűjtemény nélkül. De ami számunkra most ennél jóval fontosabb: általánosságban is érzékelhetjük a REST API gyakorlati lényegét felhasználói szemmel:

A REST API egy böngészőből hívandó URL-cím, mely eredményként egy rövid adatsort szolgáltat, jellemzően JSON formában.

Az API egyébként akár azt is lehetővé teszi, hogy kutyafajtánként kérjünk képeket. Erről, és az összes egyéb lehetőségről a dokumentációban olvashatunk. 2. Random user Következőként nézzük meg a randomuser.me API-ját:
https://randomuser.me/api/
Az API egy lehetséges eredménye a fenti linkre kattintva tekinthető meg. Ez ismét egy JSON formátumú adathalmaz. Ha ezt a kapott eredményt a json_decode() függvénnyel dekódoljuk, akkor valóban egy random user sok-sok véletlenszerűen összeválogatott adathalmazához jutunk. Ez tesztelhető az alábbi nyomógombbal.


A kapott eredmény alapján ismét tehetünk egy fontos megállapítást:

A REST API sajátossága, hogy csak nyers adatokat szolgáltat. Az adatok hasznosításának módja kizárólag az API eredményét felhasználó weboldalon múlik.

A véletlenszerű user-adatokat gyakorlatilag bármilyen módon megjeleníthetjük. Mi most éppen egy névjegyet készítettünk belőlük, melynek az képe itt látható:


A névjegyen szereplő adatok közül tekintsünk pár példát annak bemutatására, hogyan is érhetőek el a $adat nevű változóból: Bármely adat eléréséhez a generált user-adatok szerkezetét bemutató képernyő tartalma alapján szükséges dolgozni.

Fentieken túl akár táblázatban, vagy éppen adatbázisban is gondolkodhattunk volna, hiszen az API dokumentációja szerint egyszerre, vagyis egyetlen lekérdezéssel legfeljebb 5000 adatot is lekérdezhetünk. Bármelyik megközelítést is választjuk, a lényeg, hogy ez az API is a különféle teszteléseinket könnyítheti meg, ha éppen nem szeretnénk mi magunk sok-sok értéktelen tesztadat létrehozásával értékes időt pocsékolni. 3. Kriptovaluta árfolyamok A folytatásban dolgozzunk a coingecko.com oldal árfolyam-adataival, pontosabban az oldal által kínált API-val, annak dokumentációja alapján. E leírás szerint pl. egyszerűen megtudhatjuk 1 bitcoin (BTC) aktuális értékét egyéb különböző valutákban:
https://api.coingecko.com/api/v3/exchange_rates
Tegyük olvashatóvá a kapott JSON adatokat!


Így már sokkal jobban kibogozható a visszakapott eredményből a bitcoin árfolyama. Feltéve, hogy az adathalmazt ismét egy $adat változóba mentjük, úgy a bitcoin árfolyamát forintban az alábbi kifejezés tartalmazza:
$adat->rates->huf->value
tehát
1 BTC  =  6589232.287 HUF
Ismerjünk fel ismét egy fontos tényt:

A REST API lehetőségeit az őt bemutató dokumentáció alapján tudjuk megismerni és kihasználni. Egy API dokumentáció nélkül nem igazán használható.

4. Városok távolsága A fenti három példával ellentétben a legtöbb API általában bemenő paramétereket is vár, és ezek alapján ad eredményt, vagy eredményeket. Ilyen például a distance24.org API-ja, mely két város között tudja megmondani a távolságot - légvonalban.
Tekintsünk erre egy konkrét példát: kérdezzük meg, milyen távolságra van egymástól Zalaegerszeg és Tihany:
https://www.distance24.org/route.json?stops=Zalaegerszeg|Tihany
A kapott eredmény mennyiségét és megjelenését tekintve akár ijesztőnek is tűnhet a látvány. Éppen ezért tegyük olvashatóvá a JSON adatokat:


Érzékelhető, hogy a távolságon túl jóval több hasznos adatot is kínál az API. Ezen adatok értelmezését ismét az API-t bemutató dokumentáció segíti. Állapítsuk meg ezekből a két város távolságát:
A distance24.org API-ja jelenleg nem működik :(
Egy újabb tanulság tehát:

A REST API-k jellemzően paraméterezhetőek. Eredményük a bemenetként adott paraméterek értékétől függ.

Az API-k paraméterezése többnyire a php oldalak paraméterezéséhez hasonlóan, a címben kérdőjelet követően valósul meg. 5. Vonat menetrend Ötödikként nézzünk meg egy, a gyakorlatban is nagyon jól használható API-t: tájékozódjunk vasúti menetrendekről! Ebben a
https://apiv2.oroszi.net/elvira
végpont lesz segítségünkre, mely - a fenti linkre kattintás után látható módon - minden­képpen vár legalább két paramétert: azt kell megmondanunk, honnan hová szeretnénk eljutni.
Ha pl. arra vagyunk kíváncsiak, mikor megy ma vonat Hatvanból Salgótarjánba, akkor az alábbiak szerint kell használnunk az API-t:
https://apiv2.oroszi.net/elvira?from=Hatvan&to=Salgótarján
Nézzük meg az eredményt a JSON-formátum kikódolása után:


Az eredmény értelmezését az API dokumentációja, illetve azon belül is a végpont válaszainak ismertetése segíti. Eszerint a [timetable] tömb elemei rejtik a közlekedő vonatokat, benne a [starttime] az indulási időt, a [destinationtime] pedig az érkezési időt. Ezek alapján például a mai első vonat az alábbi időpontban indult, illetve érkezett:
$adat->timetable[0]->starttime       = 04:00
$adat->timetable[0]->destinationtime = 05:33
De ez csak az első vonat volt ma. A további vonatok adatai a tömb további elemeiben keresendőek.

A REST API eredménye több visszadott adatblokk esetén tömböt is tartalmazhat. Ebben az esetben a feldolgozás ciklus használatát igényelheti.

Jelenítsük meg az összes mai járatot táblázatban, esztétikus elrendezésben. A már célba ért vonatokat szürkével, az esetlegesen éppen most közlekedőt pirossal, a még elérhető vonatokat pedig zöld színnel jelöljük!

00:00:00
Indulás
Hatvan
Érkezés
Salgótarján
Hatvan - Lőrinci - Pásztó - Nagybátony - Salgótarján
04:00 05:33
06:10 07:33
08:10 09:33
10:10 11:33
12:10 13:33
14:10 15:33
16:10 17:33
18:10 19:33
20:11 21:33
22:10 23:33




Vonatindulás, illetve egy vonat célba érkezése előtt 30 másodperccel a MÁV klasszikus szignálja is hallható a weboldalon, ha ezt a funkció Ön engedélyezi. A hangok lejátszását ezen a linken ki is kapcsolhatja.

6. Időjárás előrejelzés Az API-k egyik legnagyobb klasszikusai az időjárás előrejelzést adó interfészek. Ennek roppant egyszerű oka van: az időjárás gyakorlatilag mindenkit, és folyamatosan érdekel - vagyis lehet rá üzletet építeni. Az üzleti modell szintén nem túl bonyolult:

A REST API-k használata saját weboldalunkon akár jelentős nézettség­növekedést is generálhat, és ezen keresztül komoly bevételi forrást eredményezhet.

Mindezek okán ingyenes meteorológiai API-t nem könnyű találni a neten. Tanulmányi célra azonban az infojegyzet.hu az alábbi lehetőséget kínálja Magyarország időjárásának előrejelzésére:
https://infojegyzet.hu/webszerkesztes/php/restapi/idojaras/
Természetesen az értelmezés első lépéseként ezt is érdemes megnézni a JSON forma olvashatóvá tételével:


Az adatok értelmezését és felhasználását ezúttal már Önre bízzuk! Tekintse át, vajon



Napkelte A nappal hossza ma Napnyugta
07:14

8 óra 42 perc

15:56




Kapcsolódó feladatok

1.
A fent bemutatott 6 API végpont mindegyike akkor ismerhető és érthető meg igazán, ha saját klienst készítve hozzájuk megpróbáljuk őket használni. Ezt a fajta tanulást kívánja elősegíteni az API klensek a gyakorlatban című oldal. Nézze át, majd végezze el az ott szereplő feladatokat!

2.
Továbbgondolva az eddigieket beláthattó, hogy akár mi magunk is készítünk mások számára új API-kat. Ez nyilván már lényegesen több tervező munkát igényel, ekképpen jóval izgalmasabb programozói kihívás - szerveroldalon. Az új API eredményei lehetnek véletlenszerűek, számoláson alapulóak, vagy éppen különféle adatforrásokat felhasználóak. Tekintsen rá néhány lehetséges feladatra az API végpontok létrehozása című témában is.


előző oldal random oldal következő oldal


Eddig 3 hozzászólás van a témához:

2022-02-22 17:09 Raz Ez egy remek összeállítás, remek gyakorló apikkal!!

2022-02-22 17:39 Admin Köszönöm, Raz :)

2022-03-03 13:24 Szp Szp

React-ben próbáltam az Elvira Api-t, de cors hibát kapok, amikor le akarom tölteni az adatokat fetch-el.






Új hozzászólás:
E-mail cím:


Erre a címre küldjük ki a hozzászólás jóvá- hagyásához szükséges linket. Az e-mail címet sehol nem tesszük közzé.

Név:


Ez a név fog megjelenni az Ön hozzászólásai mellett.

Mennyi tizenhét + hét?
Számjegyekkel írja be!



Ez a robotok beírása elleni védelem miatt szükséges ellenőrzés.


© infojegyzet.hu, 2021. november