Apollo Server ile GraphQL API Sunucusu Nasıl Oluşturulur

Ashley Goolam

Ashley Goolam

3 September 2025

Apollo Server ile GraphQL API Sunucusu Nasıl Oluşturulur

Müşterilerin tam olarak ihtiyaç duydukları şeyi talep etmelerini sağlayan güçlü bir API'yi nasıl oluşturacağınızı hiç merak ettiniz mi? İşte GraphQL'in büyüsü bu ve Apollo Server ile böyle bir API oluşturmak düşündüğünüzden daha kolay! REST'in katı uç noktalarından sıkıldıysanız, GraphQL esneklik sunar ve Apollo Server bunu gerçeğe dönüştürmek için başvurulacak araçtır. Bu samimi eğitimde, proje başlatmadan sorguları ve mutasyonları test etmeye kadar Apollo Server kullanarak bir GraphQL sunucusunu nasıl kuracağımızı adım adım inceleyeceğiz. İster JavaScript ister TypeScript kullanıyor olun, kısa sürede çalışan bir sunucuya sahip olacaksınız. GraphQL ve Apollo Server ile harika bir şeyler inşa etmek için dalalım!

💡
Harika API Dokümantasyonu oluşturan harika bir API Test aracı mı istiyorsunuz?

Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?

Apidog tüm taleplerinizi karşılar ve Postman'ı çok daha uygun bir fiyata değiştirir!
Düğme

Neden GraphQL ve Apollo Server'ı Seçmelisiniz?

Kolları sıvamadan önce, GraphQL ve Apollo Server'ın neden bu kadar dinamik bir ikili olduğunu konuşalım. 2012'de Facebook tarafından geliştirilen ve 2015'te açık kaynak haline getirilen GraphQL, müşterilerin belirli verileri talep etmelerini sağlayan, REST API'lerinde yaygın olan aşırı ve eksik veri çekmeyi azaltan bir API sorgu dilidir. Birden fazla uç nokta yerine, özel yanıtlar sunan tek bir akıllı uç noktanız olur. Verimli, esnek ve karmaşık veri ihtiyaçları olan modern uygulamalar için mükemmeldir.

Karşınızda Apollo Server, Apollo GraphQL'den açık kaynaklı, topluluk odaklı bir GraphQL sunucusu. Üretim ortamına hazır, Node.js'i destekler ve MongoDB veya PostgreSQL gibi veritabanlarıyla sorunsuz bir şekilde entegre olur. Şema birleştirme, önbelleğe alma ve gerçek zamanlı abonelikler gibi özellikleriyle, ölçeklenebilir API'ler oluşturmak için tek durak bir çözümdür. Ayrıca, yeni başlayanlar için kullanıcı dostu, ancak profesyoneller için güçlüdür. Express-GraphQL gibi alternatiflere kıyasla, Apollo Server daha iyi performans izleme ve daha kolay kurulum sunar. Bir blog, e-ticaret sitesi veya mobil arka uç oluşturuyorsanız, bu kombinasyon size zaman ve baş ağrısı kazandıracaktır. Heyecanlı mısınız? Projemizi kuralım!

Projenizi JavaScript veya TypeScript'te Kurma

Temeli oluşturarak başlayalım. Bir Node.js projesi kuracağız ve gerekli paketleri yükleyeceğiz. Basitlik için JavaScript'i veya tür güvenliği için TypeScript'i seçebilirsiniz; her ikisi de Apollo Server ile harika çalışır.

Adım 1: Projeyi Başlatma

Yeni Bir Klasör Oluşturun:

mkdir graphql-apollo-server
cd graphql-apollo-server

Node.js'i Başlatın:

npm init -y
npm pkg set type="module"

Adım 2: Bağımlılıkları Yükleme

Apollo Server iki ana paket gerektirir: sunucu için @apollo/server ve temel GraphQL kütüphanesi için graphql. TypeScript için türler ve bir derleme adımı ekleyeceğiz.

Bağımlılıkları yükleyin:

npm install @apollo/server graphql

JavaScript için:

package.json dosyanızdaki varsayılan scripts girdisini bu type ve scripts girdileriyle değiştirmeniz yeterlidir:

{
	// ...etc.
	"type": "module",
    "scripts": {
    	"start": "node index.js"
    }
    // other dependencies
}

TypeScript için (Önerilen):

1. TypeScript'i Başlatma:

npm install --save-dev typescript @types/node
{
  "compilerOptions": {
    "rootDirs": ["src"],
    "outDir": "dist",
    "lib": ["es2023"],
    "target": "es2023",
    "module": "esnext",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "types": ["node"]
  }
}

2. Son olarak, package.json dosyanızdaki scripts girdisini aşağıdaki type ve scripts girdileriyle değiştirin:

{
	// ...etc.
    "type": "module",
    "scripts": {
    	"compile": "tsc",
    	"start": "npm run compile && node ./dist/index.js"
    }
	// other dependencies
}
package.json

Profesyonel İpucu: TypeScript'e yeniyseniz, şemanıza ve çözümleyicilerinize tür güvenliği ekleyerek hataları erken yakalar. JavaScript prototipler için daha hızlıdır; projenizin ölçeğine göre seçim yapın.

Adım 3: Sunucu Dosyasını Oluşturma

Proje kök dizininizde bir src klasörü oluşturun ve yeni klasöre bir index.ts (veya JavaScript için index.js) dosyası ekleyin. Şemayı ve çözümleyicileri burada tanımlayacağız.

proje yapısı

Basit Bir Sorguyu Test Etme

İlk sorgumuzu oluşturalım—basit bir "merhaba" mesajı. Bu, GraphQL'in tür tanımlarını (şema) ve çözümleyicilerini (veri getiren fonksiyonlar) tanıtır.

GraphQL Şemasını Tanımlama

Şema, API'nizin taslağıdır. Tanımlamak için graphql-tag'den (@apollo/server ile birlikte gelir) gql etiketini kullanın.

index.ts (veya index.js) içinde:

import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';


// GraphQL şemasını tanımla
const typeDefs = `
  type Query {
    hello: String
  }
`;

// Çözümleyicileri tanımla
const resolvers = {
  Query: {
    hello: () => "Hello! Welcome to my server",
  },
};

// Sunucuyu oluştur ve başlat
const server = new ApolloServer({ typeDefs, resolvers });

const { url } = await startStandaloneServer(server, {
  listen: { port: 4000 },
});

console.log(`🚀  Sunucu hazır: ${url}`);

JavaScript için, türleri içe aktarın:

const { ApolloServer } = '@apollo/server';
const { startStandaloneServer } = '@apollo/server/standalone';

// Gerisi aynı

Sunucuyu Çalıştırma

Sunucunuzu başlatın:

node index.js  # JavaScript için
npm start  # TypeScript için

Tarayıcınızda http://localhost:4000 adresini ziyaret edin. Sorguları test etmek için web tabanlı bir IDE olan GraphQL Playground'u göreceksiniz.

oyun alanı

Sorguyu Test Etme

Playground'da, sol panelde bu sorguyu çalıştırın:

query {
  hello
}

"Yürüt"e tıklayın. Sağda şunları göreceksiniz:

{
  "data": {
    "hello": "Hello! Welcome to my server"
  }
}
örnek graphql sorgusu

Başarılı! Bu basit sorgu, GraphQL'in temellerini gösterir: bir dize döndüren hello alanına sahip bir Query türü. Çözümleyiciler, veriyi sağlayan "beyinlerdir"—bu durumda, statik bir mesaj. Kurulumunuzu doğrulamak için harika bir başlangıç noktasıdır.

Karmaşık Bir Türle Sorguyu Test Etme

Şimdi, özel bir türle biraz derinlik katalım. Bir Book türü ve bir kitap listesi getirmek için bir sorgu oluşturacağız. Bu, GraphQL'in yapılandırılmış veriyi nasıl işlediğini gösterir.

Şemayı Güncelleme

typeDefs'i bir Book türü içerecek şekilde değiştirin:

const typeDefs = gql`
  type Book {
    title: String
    author: String
  }

  type Query {
    books: [Book]
  }
`;

Örnek Veri Ekleme

typeDefs'in altına yeni Book türümüz için aşağıdaki örnek verileri ekleyin:

// Örnek veri
const books = [
  {
    title: 'The Awakening',
    author: 'Kate Chopin',
  },
  {
    title: 'City of Glass',
    author: 'Paul Auster',
  },
];

Çözümleyicileri Güncelleme

Çözümleyici içeriğini books türü için aşağıdakilerle değiştirin:

const resolvers = {
  Query: {
    books: () => books
  }
};

Sunucuyu yeniden başlatın ve Playground'a geri dönün.

Sorguyu Test Etme

Çalıştırın:

query GetBooks {
  books {
    title
    author
  }
}

Sonuç:

{
  "data": {
    "books": [
      {
        "title": "The Awakening",
        "author": "Kate Chopin"
      },
      {
        "title": "City of Glass",
        "author": "Paul Auster"
      }
    ]
  }
}

Harika, değil mi? Bu sorgu, bir Book nesneleri dizisi getirir. GraphQL, istemcilerin tam olarak hangi alanları istediklerini belirtmelerine olanak tanır—ne fazla, ne eksik. Eğer author'ı atlarsanız, sadece başlıkları döndürür. Bu esneklik, GraphQL'in veri yoğun uygulamalar için REST'i geride bırakmasının nedenidir.

daha karmaşık bir sorguyu test etme

Veri Eklemek İçin Bir Mutasyonu Test Etme

Sorgular okumak içindir, ancak mutasyonlar yazmak içindir. GraphQL'in veri oluşturmayı nasıl ele aldığını gösteren yeni bir kitap oluşturmak için bir mutasyon ekleyelim.

Şemayı Güncelleme

Bir Mutation türü ekleyin:

const typeDefs = `
  type Book {
    title: String
    author: String
  }

  type Query {
    books: [Book]
  }

  type Mutation {
    createBook(title: String!, author: String!): Book
  }
`;

! işareti zorunlu alanları ifade eder.

Çözümleyicileri Güncelleme

const resolvers = {
  Query: {
    books: () => books,
  },
  Mutation: {
    createBook: (_: any, { title, author }: { title: string; author: string }) => {
      const newBook = { title, author };
      books.push(newBook);
      return newBook;
    }
  }  
};

Mutasyonu Test Etme

Playground'da, çalıştırın:

mutation CreateBook{
  createBook(title: "Harry Potter", author: "J.K Rowling") {
    author
    title
  }
}

Sonuç:

{
  "data": {
    "createBook": {
      "title": "Harry Potter",
      "author": "J.K Rowling"
    }
  }
}
mutasyonu test et

Onaylamak için, GetBooks sorgusunu yeniden çalıştırın:

query GetBooks {
  books {
    title
    author
  }
}

Sonuç:

{
  "data": {
    "books": [
      {
        "title": "The Awakening",
        "author": "Kate Chopin"
      },
      {
        "title": "City of Glass",
        "author": "Paul Auster"
      },
      {
        "title": "Harry Potter",
        "author": "J.K Rowling"
      }
    ]
  }
}
eklenen son kitap

Yeni kitap eklendi! Mutasyonlar oluşturulan veriyi döndürerek istemcilerin anında geri bildirim almasını sağlar. Üretimde, kalıcılık için MongoDB gibi bir veritabanına bağlanın.

JavaScript mi TypeScript mi: Hangisini Seçmeli? Hızlı prototipler için JavaScript iyidir—daha az kalıp kod. Ancak daha büyük projeler için TypeScript, şemalar ve çözümleyiciler için tür güvenliği ile öne çıkar. TS hataları erken yakalayarak GraphQL sunucunuzu daha sağlam hale getirir.

Daha Fazla Karmaşıklık Ekleme: Kimlikler ve Argümanlı Sorgular

Gerçekçi hale getirmek için, kitaplara kimlikler ve başlığa göre getirme sorgusu ekleyin.

Şemayı güncelle:

const typeDefs = `
    type Book {
      id: ID!
      title: String
      author: String
    }

    type Query {
      books: [Book]
      book(title: String!): Book
    }

    type Mutation {
      createBook(title: String!, author: String!): Book
    }
`;

Verileri ve çözümleyicileri güncelle:

// Örnek veri
const books = [
  {
    id: 1,
    title: 'The Awakening',
    author: 'Kate Chopin',
  },
  {
    id: 2,
    title: 'City of Glass',
    author: 'Paul Auster',
  },
];

// Çözümleyiciler 
const resolvers = {
  Query: {
    books: () => books,
    book: (_: any, { title }: { title: string }) => books.find(book => book.title === title),
  },
  Mutation: {
    createBook: (_: any, { title, author }: { title: string; author: string }) => {
      const newBook = { id: books.length + 1, title, author };
      books.push(newBook);
      return newBook;
    }
  }  
};

Sorguyu test edin:

query GetBook {
  book(title: "The Awakening") {
    id
    title
    author
  }
}

Sonuç:

{
  "data": {
    "book": {
      "id": "1",
      "title": "The Awakening",
      "author": "Kate Chopin"
    }
  }
}

Bu, sorgulardaki argümanları gösterir ve istemcilerin verileri verimli bir şekilde filtrelemesine olanak tanır.

daha fazla karmaşıklık ekleme

Apollo Server ile GraphQL İçin En İyi Uygulamalar

Yaygın Sorun Giderme

Sonuç

Apollo Server ile merhaba sorgularından mutasyonlara kadar sağlam bir GraphQL sunucusu oluşturduk. İster JS ister TS'de olun, esnek API'ler oluşturmaya hazırsınız. Deney yapın, abonelikler ekleyin ve Heroku'ya dağıtın. GraphQL ve Apollo Server verimli API'lere biletinizdir!

Apidog ayrıca GraphQL ile test yapmayı da destekler, bu yüzden tamamen ÜCRETSİZ olarak kontrol etmeyi unutmayın!

Düğme
apidog görseli

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin