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/02/22 16:21] kneheztanszek:oktatas:informacios_rendszerek_integralasa:graphql_integracio [2025/04/07 16:44] (current) – [Feladat leírása] knehez
Line 1: Line 1:
 ==== GraphQL integráció ==== ==== GraphQL integráció ====
 +
 +Főbb tulajdonságok összehasonlítása a RESTAPI-val.
 +
 +Hivatalos dokumentáció:
 +
 +https://graphql.org/learn/
 +
 +|         | **REST API** | **GraphQL** |
 +| **Adatlekérdezés rugalmassága** | Fix végpontok és válaszok | Rugalmas lekérdezések, csak a szükséges adatokat kapod meg |
 +| **Kliens teljesítmény** | Többszöri kérések szükségesek különböző erőforrásokhoz | Egyetlen kérésben több adatforrásból is lekérhetők az adatok |
 +| **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 |
 +| **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 |
 +| **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 |
 +| **Adatstruktúra változás kezelése** | Módosítások új végpontok létrehozását igényelhetik | Az új mezők bevezethetők a régiek megtartásával |
 +| **Biztonság és hozzáférés-kezelés** | Beépített HTTP biztonság, szerepkörök | Finomhangolt hozzáférési szabályok szükségesek (pl. mezőszintű jogosultságok) |
 +| **Támogatott formátumok** | Általában JSON (de támogat másokat is) | JSON alapú (szigorúan GraphQL schema szerint) |
 +| **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:
  
 <code> <code>
 pip install fastapi strawberry-graphql uvicorn pip install fastapi strawberry-graphql uvicorn
 </code> </code>
 +
 +Mintapélda az első használathoz:
  
 <sxh python> <sxh python>
Line 48: Line 71:
 graphql_app = GraphQLRouter(schema) graphql_app = GraphQLRouter(schema)
 app.include_router(graphql_app, prefix="/graphql") app.include_router(graphql_app, prefix="/graphql")
 +</sxh>
  
-# Futtatás: uvicorn.exe main:app --reload+<code> 
 +uvicorn.exe main:app --reload 
 +</code> 
 + 
 +A GraphQL Playground a következő URL-en elérhető lesz: 
 +👉 http://127.0.0.1:8000/graphql 
 + 
 +---- 
 + 
 +===== Mintafeladat: Könyvtári rendszer GraphQL-lel ===== 
 + 
 +==== Feladat leírása ==== 
 +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 ==== 
 + 
 +A GraphQL séma tartalmazza az alábbi típusokat: 
 + 
 +  * **Author**: 
 +    * `id` (Int) 
 +    * `name` (String) 
 + 
 +  * **Book**: 
 +    * `id` (Int) 
 +    * `title` (String) 
 +    * `author` (Author) 
 +    * `year` (Int) 
 + 
 +==== Implementálandó funkciók ==== 
 + 
 +  * **Lekérdezés:** 
 +    * Az összes könyv lekérdezése (cím, szerző neve, év) 
 +    * Egy szerző könyveinek lekérdezése név alapján 
 + 
 +  * **Mutáció:** 
 +    * Új könyv hozzáadása a következő adatokkal: cím, szerző ID, év 
 + 
 +==== Példa lekérdezés ==== 
 + 
 +<code javascript> 
 +query { 
 +  books { 
 +    title 
 +    author { 
 +      name 
 +    } 
 +    year 
 +  } 
 +
 +</code> 
 + 
 +==== Példa mutáció ==== 
 + 
 +<code javascript> 
 +mutation { 
 +  addBook(title: "1984", authorId: 1, year: 1949) { 
 +    id 
 +    title 
 +    author { 
 +      name 
 +    } 
 +  } 
 +
 +</code> 
 + 
 +==== Technikai követelmények ==== 
 + 
 +  * Használj **FastAPI** + **Strawberry GraphQL** könyvtárakat 
 +  * Tárolásra használj beépített listákat (pl. `authors`, `books`) 
 +  * A GraphQL endpoint legyen elérhető a `http://127.0.0.1:8000/graphql` címen 
 + 
 +==== Bónusz feladat ==== 
 + 
 +  * Valósíts meg 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
  
-</sxh> 
tanszek/oktatas/informacios_rendszerek_integralasa/graphql_integracio.1740241263.txt.gz · Last modified: 2025/02/22 16:21 by knehez