Fetch API használata II.

JavaScript Web

A Fetch API egy modern, beépített JavaScript interfész, amelyet HTTP kérések küldésére és válaszok kezelésére használunk. Célja, hogy egyszerű, ígéreteken (Promise) alapuló megoldást nyújtson az adatok lekérésére és küldésére, a régi XMLHttpRequest helyett.

Mire használjuk?

  • Adatok lekérése szerverről (pl. REST API).
  • Adatok küldése (POST, PUT, PATCH).
  • Erőforrás törlése (DELETE).
  • Kommunikáció JSON, text, blob, vagy más formátumokban.

alapvető szintaxis:

Modernebb async/await szintaxis

Példa: ingatlanok

Hozz létre egy új mappát, majd nyisd meg a Visual Studio Code-ban! Legyen a mappában egy frontend és egy backend mappa! A backend letölthető innen. VS code-ban nyiss meg egy új terminált, majd lépj be a backend mappába! ( cd backend) Telepítsd fel a node csomagjait: npm i paranccsal! A backend a node index.js utasítással indítható! A végpontokat és a hozzájuk tartozó sql lekérdezéseket az index.js fájl tartalmazza. A backenden az összes ingatlan itt lekérhető: http://localhost:5000/api/ingatlan

A példák csak a JS kódot tartalmazzák. CORS kezelésével nem foglalkozunk, mert most sima localhost-ot használunk. Nincs a példában kezelve a túl hosszú idejű lekérdezés megszakítása sem. HTML kóddal bővített példákhoz görgess lejjebb!

Async – await

GET

Kérjük le az összes ingatlan adatát, és írassuk ki a konzolra! Ehhez a GET metódust használjuk.
A program ellenőrzi, hogy a válasz sikeres-e (response.ok)
JSON-ná alakítja az adatokat. Kiírja a konzolra az ingatlanok adatait (ID, kategória, ár, leírás).
Ha hiba van, azt is jelzi.

POST

Töltsünk fel egy új ingatlant!

DELETE

Töröljük ki a 14-es id-val ellátott ingatlant!

PUT

Frissítsük a 13-as ingatlant!

PATCH

Frissítsük a 13-as ingatlan árát! Patch esetén elég csak az árat elküldeni!

Feladat – zenészek

Gyakorló feladatsor, backend, megoldás: link

HTML kóddal bővítve, de még formázás nélkül

GET

Adatok lekérése a végpontról, és kiíratása div-be. Kérjük le az összes ingatlant! Egy egyszerű HTML-oldal, lefuttat egy asynchronous (async/await) JavaScript függvényt. Ez a függvény a fetch(‘http://localhost:8000/jaratok’) hívással lekéri a járatok listáját (JSON formátumban érkező tömböt). A választ JSON-ná alakítja, majd a kapott elemekből egy szöveges listát készít, és ezt beleírja a DOM-ba. Hibák esetén felhasználóbarát hibaüzeneteket jelenítsünk meg!

DELETE

Töröljünk járatot, amihez szövegbeviteli mező segítségével adjuk meg a járat azonosító számát (id). A backend végpont az id alapján tudja azonosítani melyik járatról van szó, az id az elsődleges kulcs. HTTP DELETE kérést küldünk a http://localhost:8000/jarat/{id} végpontra.

Eseménykezelés: a DOMContentLoaded: csak akkor regisztráljon eseményeket, ha a DOM betöltése kész.
A törlés gombnak adunk egy eseménykezelőt, ami a click eseményt figyeli. Az eseményre megtörténik a beolvasás, alap validálás (nem üres ID), majd hívja a törlő függvényt. Nincs külön megerősítés, mivel ez csak egy egyszerű példa, élesben célszerű plussz megerősítést kérni a tényleges törlés előtt!
Enter támogatás: kényelmi funkció, Enter leütéskor a gomb kattintást emulálja.

POST

A következő weblap lehetővé teszi új járat adatainak felvitelét az adatbázisba. A felhasználó megadja az ID-t, járatszámot, járat típusát és azt, hogy első ajtós-e, majd az adatokat HTTP POST kéréssel elküldi a http://localhost:8000/jarat végpontra. Az adatbázisban nincs auto increment beállítva, így az id-t is fel kell venni.
addJarat() függvény: fetch POST kérést küld JSON formátumban. Ellenőrzi a response.ok státuszt, hibás válasz esetén kiolvassa a szöveget és dobja az Error-t. Siker esetén JSON-t ad vissza.
Űrlap eseménykezelés: submit esemény. A preventDefault() megakadályozza teljes oldal‑újratöltést.

Hagyományos módon, .then használatával API kezelés

GET

POST

Töltsünk fel az adatbázisba egy új ingatlant! Az új ingatlan adatait egy objektumban fogom tárolni.

DELETE

Töröljünk ki egy ingatlant, pl. a 12-es id-val ellátottat.

PUT

Módosítsuk a 13-as id-val ellátott ingatlan leírását, tetszés szerinti adatait!

PATCH

Patch esetén elég csak azt az adatot elküldeni, amit ténylegesen frissítünk!