Python backend alapok¶
Ebben a részben bemutatom, hogyan fejleszthetsz Flask alapú webes alkalmazásokat, amelyek JSON formátumban válaszolnak és az URL-ben kapott azonosítók alapján dolgoznak.
HTTP metódusok¶
Az HTTP (Hypertext Transfer Protocol) egy olyan protokoll, amely lehetővé teszi a kliens és a szerver közötti kommunikációt. Az HTTP kéréseknek többféle típusa van, amelyeket metódusoknak nevezünk. A leggyakrabban használt metódusok a következők:
Metódus | Leírás |
---|---|
GET |
Az adatok lekérdezésére használt metódus |
POST |
Az adatok küldésére használt metódus |
PUT |
Az adatok frissítésére használt metódus |
DELETE |
Az adatok törlésére használt metódus |
A fenti táblázat csak a leggyakrabban használt metódusokat tartalmazza, de létezik még több metódus is, amelyeket a HTTP specifikáció részletez.
JSON¶
A kommunikáció JSON formátumban történik, amelyet már korábbban is láthattunk. Amennyiben ismereteink hiányosak, tekintsük meg az ehhez kapcsolódó anyagot:
Flask telepítése¶
Először is, telepítsük a Flask könyvtárat a következő paranccsal pip segítségével:
Megjegyzés
A pip egy csomagkezelő eszköz, amely segítségével könnyedén telepíthetünk Python csomagokat.
Probléma esetén
Ha a pip segítségével sikeresen telepítetted a Flasket, de futtatáskor a Visual Studio Code-ban No module named 'flask'
hibaüzenetet kapod, akkor valószínűleg a környezeti változók között nem szerepel a Python elérési útvonala. Ezt a problémát úgy orvosolhatod, hogy parancssorból futatod a programot: python3 backend.py
.
Alap Flask alkalmazás JSON válasszal¶
Hozzunk létre egy Flask alkalmazást, amely JSON választ ad:
backend.py | |
---|---|
Ez az alkalmazás egy egyszerű JSON választ ad a /api
útvonalon.
Próbáld ki
Indítsd el a programot, majd írd be a böngészőbe: http://127.0.0.1:5000/api
* Serving Flask app 'backend'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with watchdog (windowsapi)
* Debugger is active!
* Debugger PIN: 108-864-203
Egyéb HTTP metódusok kezelése¶
A fenti példában egy alapértelmezett, a böngésző által is használt GET
metódust használtunk. Ha szeretnénk más metódusokat is kezelni, akkor azt a methods
paraméterrel tehetjük meg:
backend.py | |
---|---|
Megjegyzés
Amennyiben nincs megadva a methods
paraméter, akkor az alapértelmezett metódus a GET
lesz.
Ennek teszteléséhez már speciálisabb eszközre van szükség, mint a böngésző. A Postman egy ilyen eszköz, amely segítségével különböző HTTP metódusokkal tesztelhetjük az alkalmazásunkat.
URL-ben kapott azonosítók kezelése¶
A Flask lehetővé teszi paraméterek fogadását az URL-ből, amelyek segítségével dinamikusan kezelhetjük a kéréseket.
Szám esetén:
@app.route('/api/items/<int:item_id>')
def get_item(item_id):
# Itt normál esetben adatbázisból kérdeznénk le az adatokat az item_id alapján
# A példa kedvéért egy statikus objektumot adunk vissza
item = {'id': item_id, 'name': 'Item Neve', 'description': 'Ez egy példa elem.'}
return jsonify(item)
Szöveg esetén:
@app.route('/api/users/<username>')
def show_user_profile(username):
# Itt visszaadhatjuk a felhasználó profilját JSON formátumban
item = {'user': username}
return jsonify(item)
Példa
HTTP státuszkódok¶
Az HTTP státuszkódok segítségével a szerver visszajelzést ad a kliensnek a kérés állapotáról.
A státuszkódok általában öt csoportra oszthatók:
1xx
(Információs válaszok): Ideiglenes válaszok, amelyek tájékoztatják a klienst a kérés feldolgozásának előrehaladásáról.2xx
(Sikeres válaszok): A kérés sikeresen feldolgozásra került.3xx
(Átirányítási üzenetek): További lépéseket kell tenni a kérést teljesítő erőforrás eléréséhez.4xx
(Klienshiba): A kérés hibás volt, és nem lehetett feldolgozni.5xx
(Szerverhiba): A szerver nem tudta teljesíteni egy érvényes kérést.
Leggyakrabban használt státuszkódok:
Státuszkód | Jelentés | Példa |
---|---|---|
200 | OK | A kérés sikeresen teljesült, például egy lista adatok sikeres lekérése. |
201 | Created | Egy új felhasználó sikeresen létrejött a rendszerben. |
202 | Accepted | A kérés feldolgozásra került, de a művelet még nem fejeződött be, pl. e-mail küldés. |
204 | No Content | Egy erőforrás sikeresen frissült, de nincs visszaküldendő adat. |
301 | Moved Permanently | Egy régi URL véglegesen átirányítva az új URL-re, pl. /old-page → /new-page . |
302 | Found (Temporary Redirect) | Az URL ideiglenesen átirányítva, pl. promóciós oldal esetén. |
304 | Not Modified | A kliens által kért erőforrás nem változott az utolsó lekérés óta. |
307 | Temporary Redirect | Ideiglenes átirányítás másik URL-re, de ugyanazzal a HTTP-metódussal. |
308 | Permanent Redirect | Hasonló a 301-hez, de biztosítja, hogy az átirányítás HTTP-metódus megőrzésével történjen. |
400 | Bad Request | Érvénytelen kérésformátum, pl. hiányzó vagy hibás mezők egy űrlapbeküldésben. |
401 | Unauthorized | Bejelentkezés szükséges, pl. egy védett API elérésénél érvénytelen tokennel. |
403 | Forbidden | A felhasználónak nincs jogosultsága az erőforrás eléréséhez, pl. adminisztrációs oldal. |
404 | Not Found | Nem található az adott URL-en a kért erőforrás, pl. rossz ID alapján keresés. |
405 | Method Not Allowed | A kérésben használt HTTP-metódus nem támogatott az adott erőforráson, pl. POST egy GET -hez kötött végponton. |
406 | Not Acceptable | Az ügyfél által elfogadott válaszformátum nem érhető el, pl. csak XML, de JSON kellene. |
409 | Conflict | Ütközés az erőforrással, pl. egy meglévő e-mail cím használatával próbál valaki regisztrálni. |
415 | Unsupported Media Type | A kérésben szereplő tartalomtípus nem támogatott, pl. nem JSON, hanem XML küldése. |
422 | Unprocessable Entity | Érvényes formátumú, de logikailag hibás adat, pl. jövőbeli dátum egy múltbeli eseményhez. |
429 | Too Many Requests | Az ügyfél túl sok kérést küldött rövid idő alatt, pl. API limit túllépése. |
500 | Internal Server Error | A szerveren váratlan hiba történt, pl. adatbázis-összekapcsolási hiba. |
501 | Not Implemented | A kérésben használt funkció nem támogatott a szerveren, pl. nem implementált végpont. |
502 | Bad Gateway | A szerver hibás választ kapott egy másik szervertől, pl. egy proxyn keresztül. |
503 | Service Unavailable | A szolgáltatás ideiglenesen nem elérhető, pl. karbantartás alatt. |
504 | Gateway Timeout | Az egyik szerver nem kapott időben választ egy másik szervertől. |
505 | HTTP Version Not Supported | A kliens által használt HTTP-verzió nem támogatott, pl. HTTP/2-t kér, de csak HTTP/1.1 érhető el. |
A Flask lehetővé teszi a státuszkódok beállítását a status
paraméter segítségével.
Példa
@app.route('/api/items/<int:item_id>')
def get_item(item_id):
# Itt normál esetben adatbázisból kérdeznénk le az adatokat az item_id alapján
# A példa kedvéért egy statikus objektumot adunk vissza
item = {'id': item_id, 'name': 'Item Neve', 'description': 'Ez egy példa elem.'}
return jsonify(item), 200
Összefoglalás
Ez az oktatóanyag bemutatta, hogyan lehet Flask alapú alkalmazásokat fejleszteni, amelyek képesek JSON válaszokat adni és URL-ben átadott azonosítókat kezelni. A Flask segítségével rugalmasan kezelhetjük a webes API kéréseket, lehetővé téve dinamikus webalkalmazások fejlesztését.
Feladatok¶
Készíts egy Flask alkalmazást, amely betölti a konyvtar.cs
fájl tartalmát, majd az alábbi végpontoknak megfelelően működik:
Végpont | Típus | Leírás |
---|---|---|
/konyvek |
GET |
Visszaadja a konyvtar.cs fájl tartalmát JSON formátumban |
/konyv/{isbn} |
GET |
Visszaadja a megadott ISBN számú könyv adatait JSON formátumban |
/konyv/{isbn} |
DELETE |
Törli a megadott számú ISBN könyvet |
Kiindulási segédlet
backend.py | |
---|---|