← Back to Blog
TEKNIK

GraphQL Nedir?

F. Çağrı BilgehanFebruary 14, 202611 min read
graphqlapirestweb geliştirme

GraphQL Nedir? REST API'ye Modern Alternatif

Frontend'iniz ihtiyacından fazla veri mi çekiyor? Birden fazla endpoint'e istek atarak sayfayı mı oluşturuyorsunuz? GraphQL ile tam ihtiyacınız olan veriyi, tek bir istekle alın.

GraphQL Tanımı

GraphQL, Facebook tarafından 2015'te açık kaynak yapılan bir API sorgu dili ve çalışma zamanıdır. İstemci, hangi veriyi istediğini kendisi tanımlar; sunucu tam o kadar veri döner.

REST vs GraphQL

REST:    GET /users/42          → Tüm user verisi (gereksiz alanlar dahil)
         GET /users/42/posts    → İkinci istek
         GET /users/42/comments → Üçüncü istek

GraphQL: POST /graphql → Tek istekle tam ihtiyacınız olan veri

| Özellik | REST | GraphQL | |---------|------|---------| | Endpoint | Birden fazla | Tek endpoint | | Veri miktarı | Over/Under-fetching | Tam ihtiyaç kadar | | Versiyon | /v1/, /v2/ | Versionsuz | | Dökümantasyon | Ayrı (Swagger) | Otomatik (Schema) | | Öğrenme eğrisi | Düşük | Orta |

Temel Kavramlar

Schema

API'nizin tip güvenli sözleşmesi:

type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post!]!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
  createdAt: String!
}

type Query {
  user(id: ID!): User
  posts(limit: Int): [Post!]!
}

type Mutation {
  createPost(title: String!, content: String!): Post!
  deletePost(id: ID!): Boolean!
}

Query (Okuma)

query {
  user(id: "42") {
    name
    email
    posts {
      title
      createdAt
    }
  }
}

Yanıt:

{
  "data": {
    "user": {
      "name": "Ali",
      "email": "ali@example.com",
      "posts": [
        { "title": "GraphQL 101", "createdAt": "2026-02-14" }
      ]
    }
  }
}

Mutation (Yazma)

mutation {
  createPost(title: "Yeni Yazı", content: "İçerik...") {
    id
    title
  }
}

Subscription (Gerçek Zamanlı)

subscription {
  newPost {
    id
    title
    author {
      name
    }
  }
}

Apollo Server Örneği

const { ApolloServer, gql } = require('apollo-server');

const typeDefs = gql`
  type User {
    id: ID!
    name: String!
    email: String!
  }

  type Query {
    users: [User!]!
    user(id: ID!): User
  }
`;

const resolvers = {
  Query: {
    users: () => db.users.findAll(),
    user: (_, { id }) => db.users.findById(id),
  },
};

const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
  console.log(`GraphQL API: ${url}`);
});

Ne Zaman GraphQL, Ne Zaman REST?

GraphQL Tercih Edin:

  • Birden fazla istemci (web, mobil, IoT) farklı veri ihtiyacına sahipse
  • İç içe ilişkili veri yapıları varsa
  • Frontend ekibi bağımsız çalışmak istiyorsa

REST Tercih Edin:

  • Basit CRUD operasyonları
  • Dosya upload/download
  • Cache mekanizması kritikse (HTTP cache)
  • Ekip GraphQL deneyimine sahip değilse

Best Practices

  1. N+1 problemini çözün — DataLoader kullanarak batch sorgular yapın
  2. Depth limiting uygulayın — Aşırı derin sorguları engelleyin
  3. Pagination kullanın — Büyük listelerde cursor-based pagination
  4. Error handling standardize edin — Consistent error response formatı
  5. Schema-first design benimseyin — Önce schema tasarlayın, sonra implement edin

Sonuç

GraphQL, frontend-backend iletişimini devrimleştiren güçlü bir araçtır. Over-fetching ve under-fetching sorunlarını ortadan kaldırır. Ancak her proje için doğru seçim olmayabilir — basit API'ler için REST hâlâ mükemmel çalışır.

API tasarımı ve GraphQL'i LabLudus platformunda pratik yaparak öğrenin.

Related Posts

Acik Kaynak Yazilim Rehberi: Nedir, Nasil Katki Yapilir?

Acik kaynak yazilim nedir ve nasil katkida bulunulur?

CI/CD Nedir? Surekli Entegrasyon ve Dagitim Rehberi

CI/CD nedir ve nasil kurulur?