Learning
GraphQL

Alapfogalmak

Schema, type, field, resolver – a GraphQL alap építőelemei példákkal.

Alapfogalmak: schema, type, field, resolver

A GraphQL négy alapfogalom köré épül. Ezek megértése nélkül nehéz az egészet befogadni – ezért itt részletesen végigmegyünk mindegyiken.

Schema (séma)

A séma a GraphQL API „szerződése". Leírja, hogy milyen adatok érhetők el, milyen típusokban, és milyen műveletek hajthatók végre. A séma az SDL (Schema Definition Language) formátumban íródik.

type Query {
  user(id: ID!): User
  users: [User!]!
  post(id: ID!): Post
}

type Mutation {
  createUser(input: CreateUserInput!): User!
  deleteUser(id: ID!): Boolean!
}

A séma a frontend és backend közötti „szerződés": mindkét oldal pontosan tudja, mi érhető el és milyen formában.

Type (típus)

A típus egy adatobjektum leírása – hasonló egy TypeScript interface-hez vagy egy adatbázis-táblához.

type User {
  id: ID!
  name: String!
  email: String!
  age: Int
  posts: [Post!]!
  role: UserRole!
}

enum UserRole {
  ADMIN
  EDITOR
  VIEWER
}

Beépített skalártípusok:

TípusLeírásPélda
StringSzöveges érték"Kovács Péter"
IntEgész szám42
FloatLebegőpontos szám3.14
BooleanIgaz/hamistrue
IDEgyedi azonosító"abc123"

A ! jel azt jelenti, hogy a mező kötelező (nem lehet null). A [Post!]! azt jelenti: nem null lista, amely nem null elemeket tartalmaz.

Field (mező)

A field egy típuson belüli egyedi adat. A fenti User típusnál az id, name, email mind egy-egy field. Minden field rendelkezik:

  • névvel (name)
  • típussal (String!)
  • opcionálisan argumentumokkal (user(id: ID!))
type Post {
  id: ID!
  title: String!
  content: String!
  publishedAt: String
  author: User!
  comments(limit: Int = 10): [Comment!]!
}

Resolver (feloldó)

A resolver az a függvény, amely egy field értékét visszaadja. Minden field mögött van egy resolver – ha nincs explicit megadva, az alapértelmezett resolver az objektum azonos nevű tulajdonságát adja vissza.

const resolvers = {
  Query: {
    user: (parent, args, context) => {
      return context.db.users.findById(args.id);
    },
  },
  User: {
    posts: (parent, args, context) => {
      return context.db.posts.findByUserId(parent.id);
    },
  },
};

A resolver három paramétert kap:

  • parent – a szülő objektum (pl. egy User, amelyhez a posts fieldeket lekérjük)
  • args – a lekérdezésben átadott argumentumok (pl. id)
  • context – megosztott kontextus (pl. adatbázis-kapcsolat, autentikált felhasználó)

Rövid összefoglaló

  • A schema leírja az API teljes adatmodelljét és elérhető műveleteit.
  • A type egy adatobjektum struktúráját definiálja (hasonló egy TypeScript interface-hez).
  • A field egy típus egyedi adatmezője, saját típussal és opcionális argumentumokkal.
  • A resolver az a függvény, amely egy field értékét visszaadja – a GraphQL motor ezeket hívja meg.

On this page