GraphQL, bir API oluştururken klasik REST yaklaşımına esnek bir alternatif sunar.
Bir uygulama tasarlarken dikkate alınması gereken en önemli faktörlerden biri, kullanılacak API mimarisinin türüdür. Verimli API tasarımı, uygulamaların yaşam döngüleri boyunca performans göstermesini sağlamada çok önemlidir.
RESTful mimarisi en popüler yaklaşımdır, ancak önemli bir dezavantajı vardır: önceden belirlenmiş verileri döndüren sabit bir uç nokta yapısı. Bu tasarım verimsiz iletişim ile sonuçlanabilir.
Buna karşılık, REST'e bir alternatif olan GraphQL, yalnızca ihtiyacınız olan verileri istemenize izin vererek daha fazla esneklik sunar.
GraphQL API'leri Nedir?
GrafikQL arka uç API'leri (Uygulama Programlama Arayüzleri) yazmak için kullanabileceğiniz bir sorgulama dilidir. Farklı REST API'leriFarklı veriler için birden çok uç noktası olan GraphQL API'lerinin yalnızca bir giriş noktası vardır.
İstemciler, sorgularında ihtiyaç duydukları verileri bu tek giriş noktasından belirleyebilir, bu da onu yalnızca gerekli verileri almak için daha esnek ve verimli hale getirir.
Basitçe söylemek gerekirse, bir GraphQL API, tarafından açıklanan GraphQL mimarisini uygular. GraphQL özellikleri. Bu tasarım, istemcilerin etkileşime girebileceği şemayı, sorguları ve mutasyonları tanımlamayı içerir.
GraphQL API mimarisinin temel bileşenlerinin basitleştirilmiş dökümünü burada bulabilirsiniz:
- Şema: Şema, API'nin sağladığı veri türlerinin ve işlemlerin açıklamasıdır. Temel olarak bir şema, mevcut verilerin yapısını ve bir müşterinin verileri değiştirmek için yürütebileceği sorgu ve mutasyon türlerini tanımlar.
- Sorgular: İstemciler, ihtiyaç duydukları verilerin yapısını belirterek veritabanından veri almak için sorguları kullanır. Ayrıca, ilgili verileri birden çok uç noktadan almak için birden çok sorguyu tek bir HTTP isteğinde iç içe geçirebilirler.
- Mutasyonlar: Mutasyonlar, veri tabanındaki verileri değiştirmek için kullanılan işlemlerdir. Müşteriler veri oluşturmak, güncellemek veya silmek için mutasyon istekleri gönderebilir.
Bir MongoDB Veritabanı Kurun
Başlamak, bir MongoDB veritabanı oluşturun. Alternatif olarak, bulutta ücretsiz olarak bir MongoDB kümesi kurun.Veri tabanınızı kurduktan sonra, MongoDB'nin veri tabanı bağlantı URI dizesini kopyalayın.
Bu projenin kodunu kendi içinde bulabilirsiniz. GitHub deposu.
Bir Apollo Sunucusu Oluşturun
Apollo Sunucusu Node.js, Express ve daha fazlasını içeren JavaScript ortamlarında GraphQL API'leri oluşturmanıza olanak tanıyan popüler bir GraphQL sunucu uygulamasıdır.
Yeni bir proje için bir dizin oluşturun ve CD bunun içine:
mkdir graphql-API-mongoDB
cd graphql-API-mongoDB
Ardından, yeni bir Node.js projesi başlatın.
npm başlatma -- evet
Bu komut bir oluşturur paket.json dosya.
Gerekli Bağımlılıkları Kurun
Paketleri yüklemek için aşağıdaki komutu çalıştırın.
npm apollo-server graphql firavun faresini kurun
Son olarak, bir index.js projenizin kök dizinindeki dosya.
Apollo Sunucusunu Kurun
Açık index.js ve aşağıdaki kodu ekleyin:
sabit { Apollo Sunucusu } = gerekmek('apollo sunucusu');
sabit firavun faresi = gerekmek('firavun faresi');
sabit typeDefs = gerekmek("./graphql/typeDefs");
sabit çözücüler = gerekmek("./graphql/çözümleyiciler");sabit sunucu = yeni ApolloSunucusu({
tip tanımları,
çözücüler
});sabit MONGO_URI = 'mongodb://localhost: 27017';
firavun faresi
.connect (MONGO_URI, {
useNewUrlParser: doğru,
UnifiedTopology kullanın: doğru,
})
.Daha sonra(() => {
konsol.kayıt("Veritabanı Bağlandı");
geri dönmek sunucu.dinle({ liman: 5000 });
})
.Daha sonra((res) => {
konsol.kayıt(`Sunucu çalışıyor ${res.url}`);
})
.yakalamak(hata => {
konsol.log (hata.mesaj);
});
Bu kod, Apollo Server kitaplığını kullanarak yerel bir GraphQL sunucusunu başlatır. Ardından, verilen bağlantı URI'si ile bir MongoDB veritabanına bağlantı kurar.
Kodun, ApolloServer'ın yeni örneğine iki bağımsız değişkeni nasıl ilettiğine dikkat edin: typeDef'ler ve çözümleyiciler. Bunlar, GraphQL API'nin yürütebileceği veri türlerini ve işlemleri belirtir.
MongoDB veritabanına bağlantı kurulduktan sonra, sunucu 5000 numaralı bağlantı noktasını dinlemeye başlar.
Veri Modelini Tanımlayın
Proje klasörünüzün kök dizininde yeni bir klasör oluşturun ve adlandırın modeller. Bu klasörde yeni bir dosya adı oluşturun. dataModel.js ve ona aşağıdaki kodu ekleyin:
sabit {model, Şema} = gerekmek('firavun faresi');
sabit çalışan Şeması = yeni Şema({
isim: Sicim,
departman: Sicim,
maaş: Sicim,
});
modül.export = model('Çalışan', çalışan Şeması);
GraphQL Şemasını Tanımlayın
Bir GraphQL şeması, GraphQL API kullanarak sorgulayabileceğiniz verilerin yapısını tanımlar. Şema ayrıca API'nin çalıştırabileceği sorguları ve mutasyonları da özetlemektedir. Verileri almak için sorguları ve değiştirmek için mutasyonları kullanabilirsiniz.
Projenizin kök dizininde yeni bir klasör oluşturun ve adlandırın. grafikql. Bu klasörün içine iki dosya ekleyin: typeDefs.js Ve çözümleyiciler.js
typeDefs.js dosyasına aşağıdaki kodu ekleyin:
sabit {gql} = gerekmek("apollo sunucusu");
sabit typeDefs = gql`
çalışan {
yaptım!
isim: Sicim
departman: Sicim
maaş: Sicim
}
girdi ÇalışanGirdi {
isim: Sicim
departman: Sicim
maaş: Sicim
}
sorgu yazın {
getEmployee (id: ID): Çalışan #geri dönmek kimliğe göre çalışan
çalışanlar: [Çalışan] #geri dönmek sıralamak ile ilgili Çalışanlar
}
tip Mutasyon {
createEmployee (çalışanGirdi: ÇalışanGirdi): Çalışan
güncellemeÇalışan (id: Kimlik, çalışanGirişi: Çalışan Girişi): boole
Çalışanı sil (kimlik: Kimlik): boole
}
`;
modül.exports = typeDefs;
Yukarıdaki bu kod, gql Çalışan verileri için bir GraphQL şeması oluşturmak üzere apollo-server paketi tarafından sağlanan işlev.
Şema dört ana öğeden oluşur: çalışan bilgileri için veri türleri, girdi türleri, sorgular ve API'nin gerçekleştirebileceği mutasyonlar.
GraphQL API için Çözümleyicileri tanımlayın
Çözümleyici, bir müşteri verileri getirmek için bir API sorgusu gönderdiğinde aktarılacak verileri tanımlayan bir GraphQL işlevidir. Temel olarak birincil rolü, gerekli verileri belirtilen veri kaynağından almak ve istemciye iade etmektir.
Aşağıdaki kodu şuraya ekleyin: çözümleyiciler.js dosya grafikql dosya. Bu durumda çözümleyiciler, Sorgu ve Mutasyon nesneleri içinde belirtilir.
Query nesnesi iki yöntemi tanımlar: çalışanlar Ve çalışanı al. Bu yöntemler, bir müşteri tarafından talep edildiğinde çalışan verilerinin veri tabanından alınmasından sorumludur.
sabit Çalışan= gerekmek("../modeller/çalışanlarModel");// GraphQL Çözücüler
sabit çözücüler = {
Sorgu: {
çalışanlar: zaman uyumsuz () => {
denemek {
sabit çalışanlar = beklemek Çalışan.find({});
geri dönmek çalışanlar;
} yakalamak (hata) {
konsol.hata (hata);
fırlatmakyeniHata('Çalışanlar getirilemedi');
}
},
çalışan: zaman uyumsuz (ebeveyn, bağımsız değişkenler) => {
denemek {
sabit çalışan = beklemek Çalışan.findById (args.id);
geri dönmek çalışan;
} yakalamak (hata) {
konsol.hata (hata);
fırlatmakyeniHata("Kimliğe göre çalışan getirilemedi");
}
},
},
Mutation nesnesinin üç yöntemi vardır: çalışan oluştur, güncellemeÇalışan, Ve silÇalışan. Bu yöntemler, MongoDB veritabanında depolanan verilerde değişiklikler yapar.
mutasyon: {
zaman uyumsuz çalışan oluştur (_, { çalışanGirişi: { isim, departman, maaş } }) {
sabit yeni çalışan = yeni Çalışan({
isim: isim,
departman: departman,
maaş: maaş
});sabit cevap = beklemek yeniEmployee.save();
konsol.log (yeni Çalışan);geri dönmek {
kimlik: yanıt._id,
...yanıt._doc
}
},zaman uyumsuz güncellemeÇalışan (_, {id, çalışanGirişi: {ad, departman, maaş}}) {
sabit güncellendiÇalışan = beklemek Çalışan.updateOne(
{ _İD: kimlik },
{ isim, departman, maaş }
);eğer (!güncellenmişÇalışan) {
fırlatmakyeniHata(Kimliği olan çalışan: ${id} bulunamadı`);
}geri dönmekdoğru; // Güncelleme başarısını gösteren bir boole değeri döndürür
},zaman uyumsuz çalışanı sil (_, {kimlik}) {
sabit silinen Çalışan = beklemek Çalışan.deleteOne({ _İD: kimlik });
eğer (!deletedEmployee || erasedEmployee.deletedCount 0) {
fırlatmakyeniHata(`kimlikli çalışan ${id} bulunamadı`);
}geri dönmekdoğru; // Silme başarısını gösteren bir boole değeri döndürür
},
},
};
modül.exports = çözümleyiciler;
Son olarak, sunucuyu döndürmek için şu komutu çalıştırın:
düğüm index.js
Bir veritabanı bağlantısı kurduktan sonra, sunucu 5000 numaralı bağlantı noktasından başlayacaktır.
Tarayıcınızda GraphQL oyun alanından HTTP istekleri yaparak GraphQL API'nin işlevselliğini test edebilirsiniz.
Örneğin, çalışan oluştur MongoDB veritabanına yeni çalışan verileri eklemek için mutasyon.
Geliştirici Topluluğunda GraphQL Popülerliği
GraphQL, popüler REST mimarisine alternatif bir API tasarım yaklaşımı olarak geliştirici topluluğunda ilgi görüyor.
Bunun nedeni, tümü tek bir giriş noktasından çeşitli kaynaklardan veri almak için daha esnek ve verimli bir yol sağlama yeteneğidir. Bu, REST API mimarisinde sık görülen bir sorun olan farklı veriler için birden çok uç noktayı yönetme zorunluluğunu ortadan kaldırır. Bu tasarım çözümü, arka uç API'lerini oluşturma ve yönetme sürecini kolaylaştırır.