tanszek:oktatas:informacios_rendszerek_integralasa:graphql_integracio
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
tanszek:oktatas:informacios_rendszerek_integralasa:graphql_integracio [2025/02/22 16:20] – created knehez | tanszek: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:// | ||
+ | |||
+ | | | **REST API** | **GraphQL** | | ||
+ | | **Adatlekérdezés rugalmassága** | Fix végpontok és válaszok | Rugalmas lekérdezések, | ||
+ | | **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ó, | ||
+ | | **Gyorsítótárazás (Caching)** | HTTP cache és CDN támogatott | Nehezebb megvalósítani, | ||
+ | | **Verziókezelés** | API verziózás szükséges (pl. `/ | ||
+ | | **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: | ||
< | < | ||
pip install fastapi strawberry-graphql uvicorn | pip install fastapi strawberry-graphql uvicorn | ||
</ | </ | ||
+ | |||
+ | Mintapélda az első használathoz: | ||
+ | |||
+ | <sxh python> | ||
+ | import strawberry | ||
+ | from fastapi import FastAPI | ||
+ | from strawberry.fastapi import GraphQLRouter | ||
+ | |||
+ | # User adatmodell | ||
+ | @strawberry.type | ||
+ | class User: | ||
+ | id: int | ||
+ | name: str | ||
+ | age: int | ||
+ | |||
+ | # Példa adatbázis | ||
+ | users = [ | ||
+ | User(id=1, name=" | ||
+ | User(id=2, name=" | ||
+ | ] | ||
+ | |||
+ | # GraphQL Query osztály | ||
+ | @strawberry.type | ||
+ | class Query: | ||
+ | @strawberry.field | ||
+ | def get_users(self) -> list[User]: | ||
+ | return users | ||
+ | |||
+ | # GraphQL Mutáció osztály (új felhasználó hozzáadása) | ||
+ | @strawberry.type | ||
+ | class Mutation: | ||
+ | @strawberry.mutation | ||
+ | def create_user(self, | ||
+ | new_user = User(id=len(users) + 1, name=name, age=age) | ||
+ | users.append(new_user) | ||
+ | return new_user | ||
+ | |||
+ | # GraphQL séma létrehozása | ||
+ | schema = strawberry.Schema(query=Query, | ||
+ | |||
+ | # FastAPI alkalmazás létrehozása | ||
+ | app = FastAPI() | ||
+ | |||
+ | # GraphQL endpoint regisztrálása | ||
+ | graphql_app = GraphQLRouter(schema) | ||
+ | app.include_router(graphql_app, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | uvicorn.exe main:app --reload | ||
+ | </ | ||
+ | |||
+ | A GraphQL Playground a következő URL-en elérhető lesz: | ||
+ | 👉 http:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Mintafeladat: | ||
+ | |||
+ | ==== 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 | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Példa mutáció ==== | ||
+ | |||
+ | <code javascript> | ||
+ | mutation { | ||
+ | addBook(title: | ||
+ | id | ||
+ | title | ||
+ | author { | ||
+ | name | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 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:// | ||
+ | |||
+ | ==== Bónusz feladat ==== | ||
+ | |||
+ | * Valósíts meg egy új mutációt: egy szerző hozzáadása név alapján | ||
+ | * Lekérdezés, | ||
+ |
tanszek/oktatas/informacios_rendszerek_integralasa/graphql_integracio.1740241204.txt.gz · Last modified: 2025/02/22 16:20 by knehez