User Tools

Site Tools


tanszek:oktatas:informacios_rendszerek_integralasa:graphql_integracio

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:informacios_rendszerek_integralasa:graphql_integracio [2025/04/07 16:42] kneheztanszek:oktatas:informacios_rendszerek_integralasa:graphql_integracio [2026/04/24 11:42] (current) knehez
Line 1: Line 1:
 ==== GraphQL integráció ==== ==== GraphQL integráció ====
 +
 +A GraphQL egy modern API-lekérdezési nyelv és futtatókörnyezet, amelyet a Facebook fejlesztett ki 2012-ben, majd 2015-ben nyílt forráskódúvá tett. A GraphQL célja, hogy rugalmasabb és hatékonyabb adatlekérdezési lehetőséget biztosítson a kliensalkalmazások számára.
 +
 +A hagyományos REST API-k esetén a kliens különböző endpointokon keresztül kér le adatokat, és gyakran előfordul, hogy több HTTP-kérésre van szükség az összes szükséges információ megszerzéséhez. Emellett a szerver által visszaadott adatszerkezet fix, így a kliens sokszor több adatot kap, mint amire valójában szüksége van.
 +
 +A GraphQL ezt a problémát úgy oldja meg, hogy a kliens pontosan megadhatja, milyen adatmezőket szeretne lekérdezni. A szerver ennek megfelelően csak a kért adatokat küldi vissza. Ez csökkenti a hálózati forgalmat és egyszerűbbé teszi az összetett adatszerkezetek lekérdezését.
 +
 +A GraphQL működésének három alapvető eleme van:
 +
 +  * **Schema** – a rendszer adatmodelljének és lekérdezési lehetőségeinek leírása. A schema határozza meg, milyen típusok, mezők és műveletek érhetők el az API-ban.
 +
 +  * **Query** – adatlekérdezésre szolgál. A kliens meghatározza, hogy milyen mezőket szeretne visszakapni.
 +
 +  * **Mutation** – adatmódosító műveletek (például létrehozás, módosítás vagy törlés).
 +
 +A GraphQL egyik fontos jellemzője, hogy általában **egyetlen endpointot** használ (például `/graphql`). A különböző műveleteket nem az URL-ek, hanem a lekérdezések szerkezete határozza meg.
 +
 +A GraphQL különösen előnyös olyan rendszerekben, ahol:
 +
 +  * a kliensalkalmazások különböző adatszerkezeteket igényelnek,
 +  * összetett, egymáshoz kapcsolódó adatok lekérdezése szükséges,
 +  * fontos a hálózati forgalom minimalizálása.
 +
 +Ugyanakkor a GraphQL implementációja általában összetettebb, mint egy hagyományos REST API, és a gyorsítótárazás vagy a jogosultságkezelés megvalósítása is több tervezést igényel.
 +
 +Az alábbi részben bemutatjuk a GraphQL alapvető jellemzőit, valamint egy egyszerű Python alapú GraphQL API implementációját FastAPI és Strawberry könyvtárak segítségével.
  
 Főbb tulajdonságok összehasonlítása a RESTAPI-val. Főbb tulajdonságok összehasonlítása a RESTAPI-val.
Line 5: Line 31:
 Hivatalos dokumentáció: Hivatalos dokumentáció:
  
-https://graphql.org/learn/+https://graphql.org/learn/introduction/
  
 |         | **REST API** | **GraphQL** | |         | **REST API** | **GraphQL** |
Line 12: Line 38:
 | **Adatok** | Több lekérdezésre lehet szükség összetett adatokhoz | Egyetlen kérésben lekérdezhető minden szükséges adat | | **Adatok** | Több lekérdezésre lehet szükség összetett adatokhoz | Egyetlen kérésben lekérdezhető minden szükséges adat |
 | **Hálózati hatékonyság** | Többszöri kérés esetén megnő a hálózati forgalom | Csökkenti a felesleges adatátvitelt és lekérdezések számát | | **Hálózati hatékonyság** | Többszöri kérés esetén megnő a hálózati forgalom | Csökkenti a felesleges adatátvitelt és lekérdezések számát |
-| **Használhatóság** | Egyszerű, széles körben ismert | Nehezebben elsajátítható, de hatékonyabb | 
 | **Gyorsítótárazás (Caching)** | HTTP cache és CDN támogatott | Nehezebb megvalósítani, egyedi cache stratégia szükséges | | **Gyorsítótárazás (Caching)** | HTTP cache és CDN támogatott | Nehezebb megvalósítani, egyedi cache stratégia szükséges |
 | **Verziókezelés** | API verziózás szükséges (pl. `/v1/users`) | Nincs szükség verziókezelésre, mert a kliens választja ki a szükséges mezőket | | **Verziókezelés** | API verziózás szükséges (pl. `/v1/users`) | Nincs szükség verziókezelésre, mert a kliens választja ki a szükséges mezőket |
Line 20: Line 45:
 | **Alkalmazási körök** | Egyszerű CRUD API-khoz ideális | Összetett, dinamikus kliensigényekhez jobb választás | | **Alkalmazási körök** | Egyszerű CRUD API-khoz ideális | Összetett, dinamikus kliensigényekhez jobb választás |
  
-Python virtuális környezet kialakítás után az alábbi sorral telepíthetjük a függőségeket:+Python virtuális környezet kialakítása: 
 + 
 +<code> 
 +python -m virtualenv .venv 
 +</code> 
 + 
 +Majd ez után az alábbi sorral telepíthetjük a függőségeket:
  
 <code> <code>
Line 80: Line 111:
 👉 http://127.0.0.1:8000/graphql 👉 http://127.0.0.1:8000/graphql
  
-=== Mintafeladat: Könyvtári rendszer GraphQL-lel ===+---- 
 + 
 +===== Mintafeladat: Könyvtári rendszer GraphQL-lel =====
  
 ==== Feladat leírása ==== ==== Feladat leírása ====
-Készíts egy egyszerű GraphQL API-t, amely egy könyvtár adatait kezeli. A rendszer tárolja a könyveket és a szerzőket, valamint lehetőséget ad új könyv felvitelére.+Készítsünk egy egyszerű GraphQL API-t, amely egy könyvtár adatait kezeli. A rendszer tárolja a könyveket és a szerzőket, valamint lehetőséget ad új könyv felvitelére.
  
 ==== Követelmények ==== ==== Követelmények ====
Line 138: Line 171:
 ==== Technikai követelmények ==== ==== Technikai követelmények ====
  
-  * Használj **FastAPI** + **Strawberry GraphQL** könyvtárakat +  * Használjunk **FastAPI** + **Strawberry GraphQL** könyvtárakat 
-  * Tárolásra használj beépített listákat (pl. `authors`, `books`)+  * Tárolásra használjunk beépített listákat (pl. `authors`, `books`)
   * A GraphQL endpoint legyen elérhető a `http://127.0.0.1:8000/graphql` címen   * A GraphQL endpoint legyen elérhető a `http://127.0.0.1:8000/graphql` címen
  
-==== Bónusz feladat ====+==== Kiegészítő feladat ====
  
-  * Valósíts meg egy új mutációt: egy szerző hozzáadása név alapján+  * Készítsünk egy új mutációt: egy szerző hozzáadása név alapján
   * Lekérdezés, amely egy évszám alapján listázza a megjelent könyveket   * Lekérdezés, amely egy évszám alapján listázza a megjelent könyveket
  
tanszek/oktatas/informacios_rendszerek_integralasa/graphql_integracio.1744044155.txt.gz · Last modified: 2025/04/07 16:42 by knehez