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!
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!
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:
- Terminalinizi açın ve bir proje dizini oluşturun:
mkdir graphql-apollo-server
cd graphql-apollo-server
Node.js'i Başlatın:
- Aşağıdaki komutları çalıştırın:
npm init -y
npm pkg set type="module"
- Bu, bağımlılıkları yönetmek için bir
package.json
dosyası oluşturur ve ES Modülleri kullanarak bir proje kurar.
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
- Kök dizininizde bir
tsconfig.json
dosyası oluşturun ve içine şunları eklemek için düzenleyin:
{
"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
}

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.

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.

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"
}
}

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.

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"
}
}
}

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"
}
]
}
}

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.

Apollo Server ile GraphQL İçin En İyi Uygulamalar
- Şema Tasarımı: Birden fazla dosya ile modüler tutun.
- Hata Yönetimi: Özel hatalar için
ApolloError
kullanın. - Performans:
@apollo/cache-control
ile önbelleğe almayı etkinleştirin. - Abonelikler:
apollo-server-express
ile gerçek zamanlı özellik ekleyin. - İzleme: Metrikler için Apollo Studio'yu kullanın.
Yaygın Sorun Giderme
- Sunucu Başlamıyor mu? Node sürümünü (14+) ve bağımlılıkları kontrol edin.
- Sorgu Hataları mı? Şema/çözümleyici eşleşmesini doğrulayın.
- CORS Sorunları mı? Sunucu seçeneklerine
{ cors: { origin: '*' } }
ekleyin. - TS Hataları mı?
@types/graphql
ve@types/node
'u yükleyin.
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!
