User Tools

Site Tools


tanszek:oktatas:informacios_rendszerek_integralasa:graphql_integracio

This is an old revision of the document!



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:

pip install fastapi strawberry-graphql uvicorn

Mintapélda az első használathoz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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="Noa", age=30),
    User(id=2, name="Anna", age=25),
]
 
# 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, name: str, age: int) -> User:
        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, mutation=Mutation)
 
# FastAPI alkalmazás létrehozása
app = FastAPI()
 
# GraphQL endpoint regisztrálása
graphql_app = GraphQLRouter(schema)
app.include_router(graphql_app, prefix="/graphql")

uvicorn.exe main:app --reload

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 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

query {
  books {
    title
    author {
      name
    }
    year
  }
}

Példa mutáció

mutation {
  addBook(title: "1984", authorId: 1, year: 1949) {
    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://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
tanszek/oktatas/informacios_rendszerek_integralasa/graphql_integracio.1744044165.txt.gz · Last modified: 2025/04/07 16:42 by knehez