Lekérdezések (Queries)
Query minták: nested lekérdezések, változók, fragmentek, aliasok és direktívák.
Lekérdezések (Queries)
A query a GraphQL olvasási művelete – ezzel kérsz le adatokat a szerverről. A query deklaratív: leírod, mit szeretnél, a szerver megadja.
Egyszerű query
A legalapvetőbb forma: egy erőforrás lekérdezése meghatározott fieldsekkel.
query GetUser {
user(id: "1") {
id
name
email
}
}Mit csinál? Lekéri az id: "1" felhasználót, és csak az id, name, email mezőket adja vissza.
Mikor hasznos? Profiloldal betöltésekor, ahol pontosan tudod, milyen adatokra van szükséged.
Nested query (beágyazott lekérdezés)
A GraphQL ereje abban rejlik, hogy kapcsolódó adatokat egyetlen kérésben lehet lekérni.
query GetPostWithDetails {
post(id: "42") {
id
title
content
publishedAt
author {
name
email
avatar
}
comments {
id
text
createdAt
author {
name
}
}
}
}Mit csinál? Lekéri a 42-es bejegyzést, a szerzőjét, és az összes hozzászólást a hozzászólók nevével együtt.
Mikor hasznos? Blogbejegyzés-oldalon, ahol egyszerre kell a tartalom, a szerző és a kommentek. REST-tel ez 3–4 kérés lenne.
Paraméterezett query (változókkal)
Éles alkalmazásokban nem szabad a lekérdezésbe égetni az értékeket – helyette változókat kell használni.
query GetUserById($userId: ID!) {
user(id: $userId) {
id
name
email
role
}
}A változókat külön JSON objektumban adod át:
{
"userId": "123"
}Mit csinál? Ugyanazt, mint az egyszerű query, de az id értéke kívülről érkezik – biztonságos, újrahasználható.
Mikor hasznos? Minden valódi alkalmazásban. A változók megakadályozzák az injection-támadásokat, és lehetővé teszik a lekérdezések újrahasználatát.
Fragment használat
Ha ugyanazokat a mezőket több lekérdezésben is szeretnéd használni, fragment-ekkel kerülheted el az ismétlést.
fragment UserBasicInfo on User {
id
name
email
avatar
}
query GetPost {
post(id: "1") {
title
author {
...UserBasicInfo
}
}
}
query GetComment {
comment(id: "5") {
text
author {
...UserBasicInfo
}
}
}Mit csinál? A UserBasicInfo fragment egyszer van definiálva, és több helyen is felhasználható a ... spread szintaxissal.
Mikor hasznos? Nagy alkalmazásokban, ahol ugyanazok a felhasználói adatok sok helyen jelennek meg. DRY (Don't Repeat Yourself) elv megvalósítása.
Alias használat
Ha ugyanazt a fieldet különböző argumentumokkal szeretnéd lekérni egy kérésben, aliasokat kell használni.
query GetMultipleUsers {
admin: user(id: "1") {
name
email
}
editor: user(id: "2") {
name
email
}
}Válasz:
{
"data": {
"admin": {
"name": "Nagy Admin",
"email": "admin@example.com"
},
"editor": {
"name": "Kiss Szerkesztő",
"email": "editor@example.com"
}
}
}Mit csinál? Ugyanazt a user fieldet kétszer hívja meg különböző argumentumokkal, az eredményeket különböző kulcsok alatt kapjuk vissza.
Mikor hasznos? Összehasonlító nézetekhez, ahol több azonos típusú erőforrást kell párhuzamosan megjeleníteni.
Direktívák: @include és @skip
Direktívákkal feltételesen lehet mezőket szerepeltetni a válaszban.
query GetUser($includeEmail: Boolean!, $skipPhone: Boolean!) {
user(id: "1") {
name
email @include(if: $includeEmail)
phone @skip(if: $skipPhone)
}
}Mit csinál? Az email csak akkor szerepel a válaszban, ha $includeEmail értéke true. A phone akkor marad ki, ha $skipPhone értéke true.
Mikor hasznos? Jogosultságfüggő adatmegjelenítésnél, vagy amikor különböző kliensek (web vs. mobil) eltérő mezőket igényelnek.
Rövid összefoglaló
- Az egyszerű query egy erőforrást kér le meghatározott mezőkkel.
- A nested query kapcsolódó adatokat egyetlen kérésben ad vissza.
- A változók biztonságossá és újrahasználhatóvá teszik a lekérdezéseket.
- A fragmentek a közös mezőcsoportok újrafelhasználását teszik lehetővé.
- Az aliasok lehetővé teszik, hogy ugyanazt a fieldet különböző argumentumokkal kétszer kérd le.
- A direktívák feltételes mezőbefoglalást tesznek lehetővé.