GQL

Învață GraphQL: comenzi explicate cu exemple

16 comenzi 6 categorii

Creat inițial de inginerii Facebook în 2012 și lansat ca standard deschis, GraphQL este un limbaj declarativ de interogare a datelor și un mediu de execuție pe server pentru API-uri. În contrast cu arhitectura REST tradițională (unde serverul impune endpoint-uri fixe care returnează adesea fie prea multe date – over-fetching, fie prea puține – under-fetching), GraphQL îi oferă clientului puterea deplină de a solicita exact câmpurile necesare și nimic mai mult, printr-un singur apel HTTP POST.

GraphQL este strict tipizat: întregul sistem este ghidat de o schemă centrală scrisă în Schema Definition Language (SDL), permițând generarea automată de cod TypeScript, validare la compilare și unelte avansate de explorare precum Apollo Studio sau GraphiQL.

Comparație Arhitecturală: REST API vs GraphQL
# Abordarea REST Tradițională (Multiple apeluri de rețea, date redundante):
# GET /api/v1/users/12         ──► Returnează 40 de câmpuri (inclusiv adrese, istoric etc.)
# GET /api/v1/users/12/orders  ──► Al doilea apel pentru a prelua comenzile
# GET /api/v1/products/55      ──► Al treilea apel pentru detaliile fiecărui produs

# Abordarea GraphQL (O singură interogare declarativă pe un singur endpoint /graphql):
query GetUserProfile {
  user(id: "12") {
    name
    email
    orders(limit: 3) {
      id
      totalAmount
      items { title }
    }
  }
}
# Clientul primește exact această structură JSON înapoi, fără un singur octet irosit!

Pilonii Tehnologici ai GraphQL

Operațiune / Concept Cuvânt Cheie SDL Rol în Arhitectura API
Interogare (Query) type Query { ... } Operațiuni read-only de preluare de date (echivalentul HTTP GET).
Mutație (Mutation) type Mutation { ... } Operațiuni care modifică starea pe server (echivalentul HTTP POST/PUT/DELETE).
Abonament (Subscription) type Subscription { ... } Fluxuri de date asincrone în timp real trimise prin conexiuni WebSockets.
Pattern-ul DataLoader Batching & Caching Elimină problema N+1 interogări SQL la rezolvarea relațiilor imbricate.
Definirea unei Scheme GraphQL (Schema Definition Language – SDL)
# schema.graphql
enum OrderStatus {
  PENDING
  PAID
  CANCELLED
}

type User {
  id: ID!
  name: String!
  email: String!
  orders: [Order!]!
}

type Order {
  id: ID!
  amount: Float!
  status: OrderStatus!
}

type Query {
  me: User
  order(id: ID!): Order
}

type Mutation {
  createOrder(amount: Float!): Order!
}

Schema & Tipuri SDL 1 comandă

Interogări & Mutații 1 comandă

Subscriptions & WebSockets 1 comandă

Performanță & DataLoader 1 comandă

Definire Scheme (SDL) 7 comenzi

Operațiuni & Interogare 5 comenzi