Learning
GraphQL

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

On this page