GraphQL - Çözümleyici
Çözümleyici, bir GraphQL sorgusu için yanıt oluşturan bir işlevler koleksiyonudur. Basit bir ifadeyle, bir çözümleyici, bir GraphQL sorgu işleyicisi görevi görür. Bir GraphQL şemasındaki her çözümleyici işlevi, aşağıda verildiği gibi dört konumsal argümanı kabul eder -
fieldName:(root, args, context, info) => { result }
Çözümleyici işlevlerinin bir örneği aşağıda gösterilmiştir -
//resolver function with no parameters and returning string
greeting:() => {
return "hello from TutorialsPoint !!!"
}
//resolver function with no parameters and returning list
students:() => db.students.list()
//resolver function with arguments and returning object
studentById:(root,args,context,info) => {
return db.students.get(args.id);
}
Aşağıda konumsal argümanlar ve açıklamaları verilmiştir -
Sr.No. | Argümanlar ve Açıklama |
---|---|
1 | root Üst alandaki çözümleyiciden döndürülen sonucu içeren nesne. |
2 | args Sorgudaki alana iletilen argümanlara sahip bir nesne. |
3 | context Bu, belirli bir sorgudaki tüm çözümleyiciler tarafından paylaşılan bir nesnedir. |
4 | info Alan adı, kökten alanın yolu dahil, sorgunun yürütme durumu hakkında bilgi içerir. |
Çözümleyici Sonuç Formatı
GraphQL'deki çözücüler, aşağıda verildiği gibi farklı türde değerler döndürebilir -
Sr.No. | Argümanlar ve Açıklama |
---|---|
1 | null or undefined bu, nesnenin bulunamadığını gösterir |
2 | array bu yalnızca şema, bir alanın sonucunun bir liste olması gerektiğini gösteriyorsa geçerlidir |
3 | promise çözümleyiciler genellikle bir veritabanından veya arka uç API'sinden getirme gibi eşzamansız eylemler gerçekleştirir, böylece sözler geri verebilirler |
4 | scalar or object bir çözümleyici başka değerler de döndürebilir |
İllüstrasyon
Çözümleyiciyi anlamak için basit bir uygulama oluşturalım. Bu, bir öğrenciyi sunucudan kimliğe göre sorgulamak için şema oluşturacaktır. Öğrenci verileri düz bir dosyada saklanacak ve adında bir düğüm modülü kullanacağız.notarealdb bir veritabanını taklit etmek ve düz dosyadan okumak.
Aşağıdaki, basit bir uygulama oluşturmak için adım adım ilerleyen bir işlemdir -
Adım 1 - Proje için Gerekli Bağımlılıkları İndirin ve Yükleyin
Adlı bir klasör oluşturun resolver-app. Dizininizi şu şekilde değiştirin:resolver-appterminalden. Daha sonra, Ortam Kurulumu bölümündeki 3 ila 5 arasındaki adımları izleyin.
Adım 2 - Şema Oluşturun
Proje klasörü çözücü uygulamasına schema.graphql dosyasını ekleyin ve aşağıdaki kodu ekleyin -
type Query {
greeting:String
students:[Student]
studentById(id:ID!):Student
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
Şema dosyası, kullanıcının karşılama, öğrenciler ve studentById için sorgulama yapabileceğini gösterir . Belirli bir kimliğe sahip öğrencileri almak için kullanıyoruzdata type ID!boş değer atanamayan benzersiz bir tanımlayıcı alanı gösterir. Öğrencilerin alan öğrenciler dizisi döndürür ve tebrik döndürür basit bir dize değeri.
Adım 3 - Çözücü Oluşturun
Bir dosya oluştur resolvers.js proje klasörüne ve aşağıdaki kodu ekleyin -
const db = require('./db')
const Query = {
//resolver function for greeting
greeting:() => {
return "hello from TutorialsPoint !!!"
},
//resolver function for students returns list
students:() => db.students.list(),
//resolver function for studentbyId
studentById:(root,args,context,info) => {
//args will contain parameter passed in query
return db.students.get(args.id);
}
}
module.exports = {Query}
Burada, studentById üç parametre alır. Bu bölümde tartışıldığı gibi, studentId bağımsız değişkenlerden alınabilir; root, Query nesnesinin kendisini içerecektir. Belirli bir öğrenciyi geri döndürmek için, öğrenci koleksiyonundaki id parametresiyle get yöntemini çağırmamız gerekir.
Burada, karşılama, öğrenciler, öğrenciKimliği sorguyu işleyen çözümleyicilerdir.students resolver functionveri erişim katmanındaki öğrencilerin bir listesini döndürür. Modül dışındaki çözümleyici işlevlerine erişmek için, Query nesnesinin module.exports kullanılarak dışa aktarılması gerekir.
Adım 4 - Uygulamayı Çalıştırın
Bir server.js dosyası oluşturun. Ortam Kurulum Bölümünde 8. adıma bakın. Terminalde npm start komutunu yürütün. Sunucu, 9000 portunda çalışır durumda olacaktır. Burada, uygulamayı test etmek için bir istemci olarak GraphiQL kullanıyoruz.
Tarayıcıyı açın ve url'yi girin, http://localhost:9000/graphiql. Düzenleyiciye aşağıdaki sorguyu yazın -
{
studentById(id:"S1001") {
id
firstName
lastName
}
}
Yukarıdaki sorgunun çıktısı aşağıda gösterildiği gibidir -
{
"data": {
"studentById": {
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad"
}
}
}