Apollo Server, Express.js ve MongoDB kullanarak nasıl etkili bir GraphQL API oluşturulacağını anlatan bu makalede, adım adım ilerleyerek, özellikle modern web uygulamalarında sıkça kullanılan bu üçlüyü bir arada nasıl kullanabileceğinizi öğreneceksiniz. Kod örnekleriyle desteklenen bu rehber, her bir bileşeni derinlemesine inceleyerek, pratik bilgiler sunuyor.
Apollo Server, GraphQL tabanlı bir sunucu oluşturmanın en popüler yollarından biridir. Express.js ise Node.js tabanlı uygulamalarda web sunucu oluşturmak için kullanılır. MongoDB ise NoSQL veritabanları arasında en yaygın olanıdır ve JSON benzeri belgelerle çalışır. Bu üç teknolojiyi bir araya getirerek, güçlü ve esnek bir backend yapı oluşturabilirsiniz.
Makalemizdeki başlıkları şu şekilde sıralayabiliriz;
- Apollo Server ve Express.js Kurulumu
- GraphQL Şeması Tanımlama
- Resolver Fonksiyonları Yazma
- MongoDB'ye Bağlanma ve Mongoose Kullanımı
- Veri Modelleme ve MongoDB Schemaları Oluşturma
- GraphQL Sorguları ve Mutasyonları
- Hata Yönetimi ve Güvenlik Uygulamaları
- Performans Optimizasyonu
- API Testleri ve Debugging
- Apollo Server'ın İleri Özellikleri
- Uygulama Ölçeklendirme ve Yönetimi
- GraphQL API'nizin Dokümantasyonu
- Gerçek Dünya Örnek Uygulamaları
- Sık Karşılaşılan Sorunlar ve Çözümleri
Apollo Server ve Express.js Kurulumu
Bu bölümde, Apollo Server ve Express.js'in nasıl kurulacağını ve bir arada nasıl çalıştırılacağını anlatıyorum. Öncelikle, npm install apollo-server-express express komutu ile gerekli paketleri yükleyin. Sonra, Apollo Server'ı Express uygulamanıza entegre etmek için aşağıdaki kodu kullanın:
GraphQL Şeması Tanımlama
GraphQL şemasını tanımlamak için, typeDefs içinde GraphQL sorgu yapısını belirleyin. Örneğin:
Bu basit şema, bir hello sorgusunu tanımlar.
Resolver Fonksiyonları Yazma
Her sorgu veya mutasyon için resolver fonksiyonları tanımlayın. Örneğin, yukarıdaki hello sorgusu için bir resolver:
Bu resolver, hello sorgusuna cevap olarak her zaman "Hello world!" döner.
MongoDB'ye Bağlanma ve Mongoose Kullanımı
MongoDB'ye bağlanmak ve Mongoose kullanmak için önce Mongoose'u yükleyin (npm install mongoose) ve ardından bağlantıyı kurun:
Burada yourDatabase MongoDB veritabanınızın adıdır.
Veri Modelleme ve MongoDB Schemaları Oluşturma
Veritabanı modelinizi oluşturmak için Mongoose şemalarını kullanın. Örneğin, bir kullanıcı modeli:
Bu kod, User adında bir MongoDB modeli oluşturur.
GraphQL Sorguları ve Mutasyonları
GraphQL API'nizde veri almak ve değiştirmek için sorgular ve mutasyonlar kullanılır. Örneğin, bir kullanıcı eklemek için bir mutasyon ve kullanıcıları listelemek için bir sorgu tanımlayabilirsiniz:
Bu kod, kullanıcıları listelemek için users sorgusunu ve yeni bir kullanıcı eklemek için addUser mutasyonunu tanımlar.
Hata Yönetimi ve Güvenlik Uygulamaları
API'nizi güvenli tutmak ve hataları yönetmek için, hataları yakalayabilecek ve uygun yanıtı dönebilecek yapıları kullanın. Örneğin, Apollo Server'da formatError fonksiyonu:
Bu örnek, hataları loglar ve kullanıcıya genel bir hata mesajı gösterir.
Performans Optimizasyonu
GraphQL API'nizin performansını artırmak için, önbellekleme ve veri yüklemeyi kullanın. Örneğin, dataloader kütüphanesi ile veri yüklemeyi (batching and caching) uygulayabilirsiniz:
Bu kod, aynı kullanıcıyı birden fazla sorgulamada önbelleğe alır ve veritabanı yükünü azaltır.
API Testleri ve Debugging
API'nizi test etmek ve hataları gidermek için, test çerçevelerini ve debug araçlarını kullanın. Jest gibi bir test çerçevesi ile basit bir test yazabilirsiniz:
Bu örnek, addUser mutasyonunun bir kullanıcı ekleyip ekleyemediğini test eder.
Apollo Server'ın İleri Özellikleri
Apollo Server, gelişmiş özelliklerle GraphQL API'lerinizi zenginleştirmenizi sağlar. Örneğin, Apollo Federation, birden fazla GraphQL servisini tek bir endpoint altında birleştirmenize olanak tanır. Bu, büyük ölçekli, mikro hizmet tabanlı sistemler için idealdir. Federation ile, her mikro hizmet kendi GraphQL şemasını tanımlayabilir ve bu şemalar birleştirilerek tek bir, tutarlı API yüzeyi oluşturulur. Aşağıdaki örnek, bir federasyon servisini nasıl oluşturabileceğinizi gösterir:
Uygulama Ölçeklendirme ve Yönetimi
Uygulamanızı ölçeklendirmek, büyüyen kullanıcı sayısı ve veri hacmi ile başa çıkmak için önemlidir. GraphQL uygulamalarını ölçeklendirmek için yatay ölçeklendirme (daha fazla sunucu eklemek) ve yük dengeleme tekniklerini kullanabilirsiniz. Kubernetes gibi konteyner orkestrasyon araçları, uygulamanızın ölçeklenmesini ve yönetimini kolaylaştırır. Aşağıdaki örnek, basit bir Kubernetes yük dengeleyici konfigürasyonunu gösterir:
GraphQL API'nizin Dokümantasyonu
GraphQL API'nizin dokümantasyonu, kullanıcıların API'nizi nasıl kullanacaklarını anlamalarına yardımcı olur. GraphQL'in introspection (iç gözlem) özelliği, API'nizin şemasını otomatik olarak dökümantasyon haline getirir. GraphQL Playground veya GraphiQL gibi araçlar, bu dokümantasyonu interaktif bir şekilde sunar ve kullanıcılara sorguları test etme imkanı verir.
Gerçek Dünya Örnek Uygulamaları
Gerçek dünya uygulamalarında GraphQL, verimli ve esnek veri sorgulama kapasitesi sağlar. Örneğin, bir sosyal medya uygulamasında, kullanıcıların arkadaş listelerini ve gönderilerini sorgulamak için GraphQL kullanabilirsiniz. Aşağıdaki şema, kullanıcılar ve onların arkadaşları arasındaki ilişkiyi nasıl modelleyebileceğinizi gösterir:
Bu şema, kullanıcıların ve onların gönderilerinin nasıl sorgulanabileceğini tanımlar.
Sık Karşılaşılan Sorunlar ve Çözümleri
GraphQL ile çalışırken karşılaşabileceğiniz yaygın sorunlardan biri, N+1 sorgu problemidir. Bu, bir ana sorgu ve ona bağlı birçok alt sorgunun veritabanı üzerinde ayrı ayrı çalıştırılması durumudur. DataLoader kütüphanesi, bu sorunu çözmek için kullanılabilir. DataLoader, benzer sorguları gruplayarak tek bir sorguda çözümler ve böylece veritabanı yükünü azaltır:
Bu kod, birden çok kullanıcı sorgusunu tek bir veritabanı sorgusunda birleştirir, böylece verimliliği artırır.
Bu makalemizde, Apollo Server, Express.js ve MongoDB kullanarak etkili bir GraphQL API oluşturma sürecini detaylıca ele aldık. Apollo Server'ın ileri özelliklerinden, uygulama ölçeklendirme ve yönetim stratejilerine, API dokümantasyonundan gerçek dünya örnek uygulamalarına ve sık karşılaşılan sorunlar ile çözümlerine kadar pek çok konuya değindik. Her bölüm, teknik bilgileri ve pratik kod örneklerini içererek, geliştiricilere GraphQL üzerinden güçlü ve esnek backend sistemleri oluşturmaları için gereken araçları sundu. Umarım bu rehber, kendi projelerinizde başarılı ve etkili GraphQL API'leri geliştirmenize yardımcı olur.