Eszköztár
128 Kezdőlap - Webszerkesztés - PHP - API végpontok
ujdomainek.hu

API végpontok

létrehozása

Feladat

A REST API című oldalon korábban megnéztük, mit is rejt ez a kifejezés, és láttunk néhány konkrét példát rá. Ezt követően az API kliensek című oldalon olyan feladatokkal is találkozhattunk már, amikor meglévő API végpontokhoz kellett klienst készítenünk. A témával való ismerkedés folytatásaként ezen az oldalon pedig olyan feladatok következnek, ahol nekünk magunknak kell létrehoznunk új API végpontokat. 1. Testtömegindex Korábban már foglalkoztunk a testömegindex számításával. Az ott ismeretett számítási mód és a számok értékelése alapján készítsünk API-t, mely bemenetként kapja egy ember testtömegét, és testmagasságát, és válaszként megadja a testtömegindexet, annak minősítését szövegesen és képi hivatkozással, valamint túlsúly esetén annak mértékét kg-ban. A szempontok könnyebb elképzelését segítik az alábbi hivatkozásminták és azokra generálandó válaszok.
  • API hívás:
  • http://localhost/api/tti/?kg=70&cm=178
  • Minta az API hívás eredményére JSON formában:
  • {"kg":"70","cm":"178","tti":22.09,"minosites":"normál testalkat","testkep":"https:\/\/infojegyzet.hu\/webszerkesztes\/javascript\/testtomegindex\/body_correct.gif","tobblet":0}
  • A JSON forma dekódolva - az olvashatóság érdekében:
  • stdClass Object
    (
        [kg] => 70
        [cm] => 178
        [tti] => 22.09
        [minosites] => normal testalkat
        [testkep] => https://infojegyzet.hu/webszerkesztes/javascript/testtomegindex/body_correct.gif
        [tobblet] => 0
    )
    
    Ennek a feladatnak a minta kedvéért itt elérhető a megoldása, valamint itt ki is próbálható. A további feladatok megvalósítása során dolgozzon e minta alapján!
    2. Húsvét és pünkösd dátuma Szintén volt már téma az infojegyzet.hu oldalain a húsvét és a pünkösd számításának módja. Készítsen API-t az ott olvasható számítási mód alkalamazásával, mely egy bemeneti évszám alapján megválaszolja, hogy a kért évben mely napokra estek, vagy fognak esni a húsvét és a pünkösd dátumai.
    Az elkészítendő API az alábbi hívással legyen elérhető, illetve a folytatásban szereplőeknek megfelelően adjon vissza eredményt.
  • API hívás:
  • http://localhost/api/husvetpunkosd/?ev=2021
  • Minta az API hívás eredményére JSON formában:
  • {"ev":"2021","nagypentek":"április 2.","husvetvasarnap":"április 4.","husvethetfo":"április 5.","punkosdvasarnap":"május 23.","punkosdhetfo":"május 24."}
  • A JSON forma dekódolva - az olvashatóság érdekében:
  • stdClass Object
    (
        [ev] => 2021
        [nagypentek] => április 2.
        [husvetvasarnap] => április 4.
        [husvethetfo] => április 5.
        [punkosdvasarnap] => május 23.
        [punkosdhetfo] => május 24.
    )
    
    3. Adóazonosító jelből születési dátum Magyar állampolgárként mindannyian rendelkezünk adóazonosító jellel. Ez valójában egy 10 számjegyű szám. A számot az adóhivatal adja ki, képzésének szabályát pedig jogszabály határozza meg. Ennek megfelelően A 10. számjegy képzése az előzőekből úgy történik, hogy a számjegyeket megszorozzuk a sorszámával és ezeket a szorzatokat összegezzük. A 10. számjegy a szorzat 11-gyel való osztásának maradéka. Nem adhatók ki azok a sorszámok, amelyek esetén az osztási maradék 10 lenne.

    Fentiek alapján készítsen API-t, ami egy bemeneti számról meghatározza, hogy érvényes adóazonosító-e, és ha igen, válaszként megadja az adat tulajdonosának születési dátumát. Érvénytelen adóazonosító esetén hibajelzést ad.
  • API hívás:
  • http://localhost/api/adoazonosito/?jel=823456796
  • Minta az API hívás eredményére JSON formában:
  • {"jel":"823456796","szul_datum":"1931.03.23.","error":"0"}
  • A JSON forma dekódolva - az olvashatóság érdekében:
  • stdClass Object
    (
        [jel] => 823456796
        [szul_datum] => 1931.03.23.
        [error] => 0
    )
    
    4. Holdfázis Ha ismerünk egy véletlenszerűen választott időpontot a naptárból, amikor éppen telihold van, valamint pontosan tudjuk, hogy milyen időközönként van újra és újra telihold, akkor ezekből bármilyen időszakban meg tudjuk mondani az éppen aktuálisan következő telihold időpontját, vagy akár a pillanatnyi holdfázist is tetszőleges időpontban.
    Nézzük az adatokat: A szinodikus idő egy egészen megbízható pontosságú átlagérték, ám a föld és hold keringésének sajátosságai miatt az ezzel számított egyes konkrét holdfázisok akár ±6 óra eltérést is mutathatnak a valóságos időpontokhoz képest. A programunk elkészítése során ezt most elfogadtható hibahatárnak tekintjük.

    A
    Ezek alapján készítsen API-t, mely megadja egy paraméterben kapott dátumot követő holdtölték időpontjait! A visszaadott telihold-időpontok száma szintén paraméterben legyen megadható!
  • API hívás:
  • http://localhost/api/telihold/?datum=2024-12-01&db=12
    Az API-t úgy készítse el, hogy paraméter nélkül, vagy éppen egy paramaéterrel is használható legyen. A paraméterek alapértelmezés szerinti értékei a dátum esetén a mai nap, a visszaadott időpontok száma tekintetében pedig 3 legyen.
  • API hívás:
  • http://localhost/api/telihold/
  • Minta az API hívás eredményére JSON formában:
  • {"telihold":["2024-12-15 15:14","2025-01-14 03:58","2025-02-12 16:42"]}
  • A JSON forma dekódolva - az olvashatóság érdekében:
  • stdClass Object
    (
        [telihold] => Array
            (
                [0] => 2024-12-15 15:14
                [1] => 2025-01-14 03:58
                [2] => 2025-02-12 16:42
            )
    
    )
    
    B
    Szintén a kezdeti adatok felhasználásával készítsen API-t, mely egy paraméterben kapott időpont alapján visszaadja az éppen akkor aktuális holdfázist - paraméter hiányában pedig a pillanatnyi holdfázist!

    Az aktuális holdfázis jelölésére több megoldás is létezik. Mi most válasszuk azt a megközelítést, amikor visszaadjuk a hold látható részének nagyságát százalékban (100% - telihold; 0% - újhold), illetve emellett a változás irányát, ami lehet "növekvő", "fogyó", vagy éppen pont "telihold", illetve "újhold".
  • API hívás:
  • http://localhost/api/holdfazis/?nap=2024-12-02&ido=14:17
  • Minta az API hívás eredményére JSON formában:
  • {"idopont":"2024-12-02 14:17","holdfazis":12,"valtozas":"növekvő"}
  • A JSON forma dekódolva - az olvashatóság érdekében:
  • stdClass Object
    (
        [idopont] => 2024-12-02 14:17
        [holdfazis] => 12
        [valtozas] => növekvő
    )
    
    Az elkészített API végponthoz készítsen API klienst is, mely grafikusan mutatja meg az aktuális holdfázist. Ehhez használhatja a jobb oldali kép tartalmát is, de akár egyéb változatot is kereshet hozzá a neten.

    Tudta? A növekvő holdat a fogyó holdtól az alakja is megkülönbözteti. A növekvő – vagy másként fogalmazva dagadó – hold mindig D alakú, míg a fogyó – vagyis csökkenő – hold mindig C alakú. Segítenek a kezdőbetűk.

    5. Névnapok Egyes weboldalakon gyakran előforduló tartalom, hogy feltüntetik az aktuális névnapokat, vagy akár az elkövetkező napokon ünneplők neveit is. Ehhez a hátteret például egy API biztosíthatja, melynek bemenete egy dátum, eredménye pedig a dátumhoz tartozó névnap, vagy névnapok. A szükséges adatok akár CSV-ből, akár SQL-ből is használhatóak.
    Készítsen ilyen API-t az alábbi adatforrások valamelyikének felhasználásával!
  • API hívás:
  • http://localhost/api/nevnapok/?nap=12-02
  • Minta az API hívás eredményére JSON formában:
  • {"nevnap":[{"datum":"december 2.","nevnap1":"Melinda","nevnap2":"Vivienn"}]}
  • A JSON forma dekódolva - az olvashatóság érdekében:
  • stdClass Object
    (
        [nevnap] => Array
            (
                [0] => stdClass Object
                    (
                        [datum] => december 2.
                        [nevnap1] => Melinda
                        [nevnap2] => Vivienn
                    )
    
            )
    
    )
    
    Miért lett az API visszaadott eredménye egy tömb?
    Azért, mert némiképp előre gondolkodtunk. Ugyanis a kezdeti adatforrás felhasználásával olyan végpontot is készíthetünk az API-hoz, amikor bemenetként egy nevet adunk meg, válaszként pedig azokat a dátumokat várjuk, amikor a megadott név tulajdonosai névnapjukat ünneplik. Márpedig bőven akadnak olyan keresztnevek, amelyek nemcsak egyszer fordulnak elő naptárban. Ilyenformán az eredmény a több visszaadandó érték okán leginkább egy tömbben lesz megjeleníthető. Ha pedig a név keresésénél kapott eredményt tömbként adjuk vissza, akkor az egységesség jegyében már a dátumkeresés eredményének visszaadásánál is célszerű ekképpen eljárni.

    Fentiek értelmében készítse el az API kiegészítését. Mintaként tekintse az alábbiakat.
  • API hívás:
  • http://localhost/api/nevnapok/?nev=Pál
  • Minta az API hívás eredményére JSON formában:
  • {"nevnap":[{"datum":"január 25.","nevnap1":"Pál","nevnap2":""},{"datum":"június 26.","nevnap1":"János","nevnap2":"Pál"},{"datum":"június 29.","nevnap1":"Péter","nevnap2":"Pál"},{"datum":"június 30.","nevnap1":"Pál","nevnap2":""}]}
  • A JSON forma dekódolva - az olvashatóság érdekében:
  • stdClass Object
    (
        [nevnap] => Array
            (
                [0] => stdClass Object
                    (
                        [datum] => január 25.
                        [nevnap1] => Pál
                        [nevnap2] => 
                    )
    
                [1] => stdClass Object
                    (
                        [datum] => június 26.
                        [nevnap1] => János
                        [nevnap2] => Pál
                    )
    
                [2] => stdClass Object
                    (
                        [datum] => június 29.
                        [nevnap1] => Péter
                        [nevnap2] => Pál
                    )
    
                [3] => stdClass Object
                    (
                        [datum] => június 30.
                        [nevnap1] => Pál
                        [nevnap2] => 
                    )
    
            )
    
    )
    
    előző oldal random oldal következő oldal


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

    2022-05-15 21:14 L Jasmin Nagyon jó feladatok, de a nevnapok.sql-ben szökőév szerint szerepelnek a névnapok, az enyém nincs is benne (február 24.)
    Jázmin

    2022-05-15 22:08 Admin Kedves Jázmin,
    köszi az észrevételt, bele is raktam a te névnapodat is :)
    A szökőnapot pedig töröltem, mert végső soron valóban az van ritkábban, vagyis az a speciális eset.




    Ú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 tizenkilenc + kettő?
    Számjegyekkel írja be!



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


    © infojegyzet.hu, 2021. december