Cloud Code Functions kullanarak GraphQL ve NodeJS entegrasyonları

GraphQL, API geliştiricilerine şeker, baharat ve güzel olan her şeyi getirir, ancak temelde bir sorgu dilidir, böylece ne aradığınızı belirtebilirsiniz.

Peki ya uygulamanızda bundan daha fazla iş zekasına ihtiyacınız varsa?

Ya bununla birlikte bazı mantıklara ihtiyacınız varsa?

Ya bununla birlikte düzgün bir NPM Modül modülü istiyorsanız?

Kemerlerinizi bağlayın çünkü bugün size çok güçlü bir şey göstereceğim. Ve büyük güçlerle birlikte büyük… şey… büyük zaman tasarrufu, büyük olanaklar, büyük bir sürü iyi şey gelir…

GraphQL hakkında daha fazla bilgi edinmek istiyorsanız bu yazıya bir göz atın: GraphQL nedir

Binmek için bu boyda olmalısınız…

GraphQL ile oynamak için Parse 3.5.0 veya üstünü kullanın.
Sunucu Ayarları ve Parse Sunucusunu Yönet’e gidin ve uyumlu bir sürüm kullandığınızdan emin olun.

Yepyeni parlak özelliğimiz: GraphQL + Bulut Kodu Fonksiyonları

Zaten bir Parse/Back4app kullanıcısıysanız, muhtemelen Cloud Code’u kullanmış ya da en azından duymuşsunuzdur.

Cloud Code aslında son cihazlar yerine Back4app’in Uygulama sunucularından çalışan NodeJS kodudur.

Bu, ihtiyaçlarınıza bağlı olarak birkaç önemli avantaj sağlar, ancak esasen şunları yapmanızı sağlar:

  • Cep telefonu pillerinden tasarruf edin

    Ağır işlem yükünü cihazdan Bulut’a aldığınızda, yoğun işlem cihazda yapılmaz ve pil tasarrufu sağlanır. İşlemlerinizi sunucularımızda gerçekleştirirsiniz ve müşteriye yalnızca nihai sonucu alırsınız. Artık cebinizde sıcak cep telefonu yok. Artık “OMG bu uygulama şarjımı bitiriyor!” demek yok.

  • Veri planlarından tasarruf edin

    Yani bir rapor almak için almanız gereken bir ton nesne var. Binlerce mi? Milyonlarca mı?
    Bu, almanız gereken çok fazla veridir ve WiFi kullanmıyorsanız, cep telefonu veri planınızı yükseltseniz iyi olur.
    Veri planının oldukça pahalı olduğunu hepimiz biliyoruz (artık kimse SMS mesajları için para ödemiyor, değil mi?) Peki ya daha akıllıca bir yaklaşımımız olsaydı?
    Raporu tamamen bulut üzerinde hesaplatıp cihaza yalnızca en son sonucu alabilseydik ne olurdu? Veri planınızdan çok daha az tüketecek ve aynı zamanda daha hızlı çalışacak daha küçük bir yük?
    Kulağa harika mı geliyor? Cloud Code’un yaptığı budur…

  • Daha hızlı kod dağıtımı elde edin

    Bir zamanlar geliştiriciler yazılımlarını App Store’larda yeniden yayınlamak zorundaydı. O zamanlar bu bir piyangoydu: daha hızlı bir yorumcu bulduğunuzda Uygulamanız aynı gün kullanıcılara sunulurdu. Daha yavaş ya da seçici bir yorumcu bulduğunuzda ise Uygulamanızın yayınlanması haftalar sürebilirdi. Tabii yayınlanırsa.
    Neden bunu riske atalım?
    Uygulamanızın yalnızca ön uç kısmını App Store’lara gönderin ve mümkün olduğunca çok mantığı Bulut Kodu olarak adlandırılacak şekilde bırakın.
    Mantıkta küçük bir değişiklik mi yapmanız gerekiyor? Ya da büyük bir değişiklik? Hiç sorun değil.
    Bulut Kodunu değiştirin, tekrar dağıtın ve yeni kadar iyisiniz. Başka bir yerden gelen bir adamın yorumları yok ve müşterileriniz için anında kullanılabilirlik.

Ama yine de… GraphQL ne olacak?

GraphQL sorgu yapmanızı sağlar. Çok akıllı sorgular yapabilirsiniz, ama sadece sorgular.

CEO’muz Davi, bunu nasıl daha akıllı hale getirebileceğimizi tartışırken, Cloud Code Functions ile entegrasyon tam bir mantık gibi görünüyordu: her iki dünyanın da en iyisine sahipsiniz! Cloud Code Functions’ın gücü ve zekası VE GraphQL’in kolaylığı ve sürdürülebilirliği.

Yeni özelliğimiz sayesinde Cloud Code Functions’ı çalıştırmak ve sonuçlarını almak için GraphQL türlerini genişletebilirsiniz.

Cloud Code İşlevlerinize hayal edebileceğiniz herhangi bir iş mantığını uygulayabilir, NPM Modülleri ile birlikte dahil edebilir ve hepsini GraphQL ile sorgulayabilirsiniz.

Bu kadar konuşma yeter. Hadi elimizi taşın altına koyalım…

Kullanacağımız Sınıflar ve Nesneler

Bu yazı için iki ayrı sınıf oluşturdum: Çalışan ve Evcil Hayvan, Back4app’teki çalışanları ve onların evcil hayvanlarını tutacak.

Bir Çalışan aşağıdaki özelliklere sahiptir:

  • isim (String)
  • Yaş (Sayı)
  • e-posta (String)
  • position (String)
  • hasThisPet (Pet sınıfına işaretçi)

screen-shot-2019-08-07-at-13-18-26

Bir Evcil Hayvan aşağıdaki özelliklere sahiptir:

  • isim (String)
  • türler (String)

screen-shot-2019-08-07-at-13-18-37

Ve bazı Bulut Kodu İşlevleri

Bulut Kodu İşlevlerimiz için main.js adında bir dosya yazacağım ve aşağıdaki kodu dahil edeceğim.

Tamamen yorumlanmış beş Bulut Kodu İşlevi vardır:

  • checkGraphQLSupport
    Uygulamanın GraphQL desteği olup olmadığını al
  • retrieveFirstEmployeeByName
    Veritabanında belirli bir adla bulunan ilk Çalışanın tüm ayrıntılarını alır
  • retrieveAllEmployees
    tüm Çalışanlar hakkındaki tüm ayrıntıları alın
  • retrieveOnwerOfPetByName
    Belirli bir ada sahip bir Evcil Hayvanı olan bir Çalışanın ayrıntılarını al
  • retrieveEmployeeByNameWithPet
    Bir Çalışanın ve Evcil Hayvanının tüm ayrıntılarını alın
Parse.Cloud.define("checkGraphQLSupport", async req => {
  /*
    Bu fonksiyon, Uygulamanın GraphQL desteğine sahip olup olmadığını döndürür. 
    Uygulama destekliyorsa parseGraphQLServer doğrudur, aksi takdirde yanlıştır
  */
  if (parseGraphQLServer){
    return "Bu Uygulama GraphQL desteğine sahiptir.";
  } else {
    return "Bu Uygulama GraphQL desteğine sahip değil. Yanlış Parse sürümü olabilir mi?";
  }
});

Parse.Cloud.define("retrieveFirstEmployeeByName", async req => {
  /*
    Bu fonksiyon, verilen bir isimle bulunan ilk Çalışanı alır.
    Çalışanın tüm özellikleri alınır.
    Veritabanında birden fazla Çalışan varsa yalnızca bir Çalışan döndürülür.
    Çalışan yoksa null değeri alınır.
  */
  const sorgu = new Parse.Query("Çalışanlar"); 
  query.equalTo("name", req.params.name);
  const result = await query.first();
  return result;
});

Parse.Cloud.define("retrieveAllEmployees", async req => {
  /*
    Bu fonksiyon tüm Çalışanları alır.
    Employee sınıfının tüm özellikleri alınır, ancak yalnızca bu sınıf alınır.
    İşaretçilerin veya İlişkilerin hiçbir detayı alınmaz, sadece objectId alınır.
    Çalışanlardan oluşan bir dizi döndürülür. Çalışan yoksa boş.
  */
  const sorgu = new Parse.Query("Çalışanlar"); 
  const sonuçlar = await query.find();
  return results;
});

Parse.Cloud.define("retrieveOnwerOfPetByName", async req => {
  /*
    Bu fonksiyon, bir Pet ile ilgili Çalışan hakkındaki bilgileri alır,
    Pet'in adına göre.
    Employee sınıfının tüm özellikleri alınır.
    Pet'in hiçbir detayı alınmayacaktır.
    Bir Pet dizisi döndürülür. Pet bulunamazsa boş bırakılır.
  */

  // Önce Evcil Hayvan hakkındaki bilgileri almak için bir sorgu yapıyoruz
  const petQuery = new Parse.Query("Pet"); 
  petQuery.equalTo("name", req.params.name);
  
  // Ardından hasThisPet özelliğine dayalı olarak onwer'ının ayrıntılarını almak için bir sorgu yaparız
  employeeQuery = new Parse.Query("Çalışanlar"); 
  employeeQuery.matchesQuery("hasThisPet", petQuery);
  const sonuçlar = await employeeQuery.find();

  sonuçları döndür;
  
});

Parse.Cloud.define("retrieveEmployeeByNameWithPet", async req => {
  /*
    Bu fonksiyon, Çalışan ve ilgili Pet hakkındaki bilgileri alır,
    Çalışan adına göre.
    Employee sınıfının ve Pet sınıfının tüm özellikleri alınır.
    Tam olarak doldurulmuş hasThisPet özelliği de dahil olmak üzere bir Employee dizisi döndürülür
    evcil hayvan hakkında bilgi ile.
    Employee bulunamazsa empy dizisi döndürülür.
  */
  const sorgu = new Parse.Query("Çalışanlar"); 
  query.equalTo("name", req.params.name);
  query.include("hasThisPet")
  const sonuçlar = await sorgu.find();
  return results;
});

Bunu Cloud Code Functions’ımıza, Cloud klasörüne yükleyeceğiz.

Küçük bir ekstra adım

Yeni yayınladığımız Cloud Code Fonksiyonları artık kullanılabilir, ancak GraphQL ile çalışabilmeleri için schema.graphql adında bir dosya oluşturmalı ve bu fonksiyonları açığa çıkarmalıyız.

Sözdizimi çok basittir, ancak dikkat gerektirir:

extend type Query {
 GraphQLMethodName (parameterName: parameterType): ReturnType! @resolve(to:"CloudCodeFunctionName")
}

yukarıdaki kod için, sözdizimi temsil eder:

  • GraphQLMethodName
    Bu, GraphQL sorgunuzda çağıracağınız addır. Bulut Kodu İşlevi adıyla eşleşmesi gerekmez, ancak bu yöntemin ne yaptığını anlamayı kolaylaştıracak bir şey seçmelisiniz.
  • parameterName
    Bulut Kodu İşlevinin içindeyken İstekte tüketeceğiniz parametrenin adı. Bulut Kodu İşlevinizde parametre kullanmıyorsanız bunu geçmeniz gerekmez.
  • parametreTipi
    Geçtiğiniz parametrenin türü. Şemalar hakkında daha fazla bilgi edinebilir ve tüm olasılıkları görebilirsiniz. Bulut Kodu İşlevinizde parametre kullanmıyorsanız bunu geçmeniz gerekmez.
  • ReturnType
    Bu, yönteminizin dönüş türüdür.
  • CloudCodeFunctionName
    Bu, main.js dosyanızda verdiğiniz Bulut Kodu İşlev adıyla eşleşmelidir, çünkü bu kodu işlev adına göre çağıracaktır.

Yani, az önce oluşturduğumuz main.js dosyamız için schema.graphql dosyamız şöyle olacaktır:

extend type Query {
  checkGraphQLSupport: String! @resolve(to: "checkGraphQLSupport")
  retrieveThisEmployeeByName (name:String): EmployeesClass! @resolve(to: "retrieveFirstEmployeeByName")
  giveMeAllEmployees: [ÇalışanlarSınıfı!]! @resolve(to: "retrieveAllEmployees")
  whichEmployeeIsOnwerOfThisPet (name:String): [EmployeesClass!]! @resolve(to: "retrieveOnwerOfPetByName")
  gatherEmployeeAndPetByEmployeeName (name:String): [EmployeesClass!]! @resolve(to: "retrieveEmployeeByNameWithPet")
}

O kadar da zor değil, değil mi?

Cloud Code Functions adıyla eşleşmeyen çok kapsamlı adlar kullandığıma dikkat edin, böylece açığa çıkarırken yeniden adlandırabileceğinizi bilirsiniz.

Şimdi Uygulamanızın Bulut Kodu İşlevleri bölümüne geri dönün ve bu dosyayı da yükleyin. Cloud klasöründe olduğundan da emin olun. Gerekirse oraya sürükleyip bırakabilirsiniz.
Orada zaten bu isimde bir dosyanız varsa ve yeni bir dosya yükleyemiyorsanız, yüklemeden önce sağ tıklayıp silebilirsiniz.

Her şeyi dağıtın ve gitmeye hazırız:

screen-shot-2019-08-07-at-14-52-49

Şimdi, sihir zamanı…

GraphQL konsolunuza gidin. “query” yazmaya başlayın ve Otomatik Tamamlama işlevini kullanın (Windows’ta CTRL + Spacebar, Mac’te OPTION + Spacebar) ve sihrin gerçekleştiğini görün:

screen-shot-2019-08-07-at-15-11-36

Tüm yöntemlerimiz orada ve her birini sorgulayabiliyoruz. Teker teker deneyelim:

  • checkGraphQLSupport

    (Bulut Kodu İşlevimiz checkGraphQLSupport‘a çözümlenir)
    screen-shot-2019-08-07-at-15-14-49

  • retrieveThisEmployeeByName (name:String)

    ( retrieveFirstEmployeeByName Bulut Kodu İşlevimize çözümlenir)
    screen-shot-2019-08-07-at-15-19-18

  • giveMeAllEmployees

    (Bulut Kodu İşlevimiz retrieveAllEmployees’e çözümlenir)
    screen-shot-2019-08-07-at-15-21-06
    Yukarıdaki örnekte, name ve age özelliklerinin doğru şekilde alındığına, ancak hasThisPet’in Pet’in adı ve türü için null değerlere sahip olduğuna dikkat edin.
    Bunun nedeni, söz konusu Bulut Kodu Fonksiyonuna Evcil Hayvan hakkındaki bilgileri dahil etmememizdir (include() yöntemini kullanarak).
    Otomatik Tamamlama bize olasılıkları gösterecektir, ancak Bulut Kodu İşlevinde bu bilgileri yerine getirmek için hiçbir veri sağlanmamıştır.
    Bilgilerin nasıl dahil edileceğini görmek için aşağıdaki gatherEmployeeAndPetByEmployeeNameresolves örneğine bakın.

  • hangiÇalışanBuEvcilHayvanınSahibidir

    (Bulut Kodu İşlevimiz retrieveOnwerOfPetByName‘e çözümlenir)
    screen-shot-2019-08-07-at-15-26-12

  • gatherEmployeeAndPetByEmployeeName 

    (Bulut Kodu İşlevimiz retrieveEmployeeByNameWithPet‘e çözümlenir)
    screen-shot-2019-08-07-at-15-28-54

Harika tanımlarınız güncellendi

İşte GraphQL’e biraz iş mantığı getirmenin yolu budur.

Seni seviyorum 3000!

Sonuç

GraphQL güçlü ve kolay bir çok platformlu sorgu dili ve çalışma zamanıdır, ancak günün sonunda yalnızca bir Sorgu Dilidir.
Cloud Code Functions ile bu yepyeni entegrasyon sayesinde, Cloud Code’un gücünü ( NPM Modülleri dahil, bebeğim!) ortaya çıkararak size her iki dünyanın en iyisini getirdik.

Artık her şey size ve yaratıcılığınıza kalmış! Nasıl beğendiğinizi ve projelerinizde nasıl kullandığınızı aşağıdaki yorumlarda bize bildirin!

Cloud Code nedir?

Cloud Code temel olarak Node JS’dir. Son cihazlar yerine Back4app sunucularından çalışır. İhtiyaçlarınıza göre farklı avantajları vardır. Pillerinizden tasarruf etmenizi, daha hızlı kod dağıtımları yapmanızı ve ihtiyaçlarınıza göre veri tasarrufu yapmanızı sağlar.

Cloud Code Cep Telefonu Pilinden Tasarruf Etmenize Nasıl Yardımcı Olur?

Cihazlardaki yükün azalması nedeniyle pil tasarrufuna yardımcı olur. Cihaz tarafından her zaman ele alınan işlem yükü bulut koduna kayacak ve cihaz normalden daha fazla dinlenecek. Bu nedenle, sonunda pil tasarrufuna yardımcı olacaktır.

Cloud Code veri tasarrufuna nasıl yardımcı olur?

Bulut kodu, wifi veya mobil verilerinizle yaptığınız tüm verileri kendisi alacaktır. Verileri yeniden türetmeye devam edecek ve bulutta tam raporlar hesaplayacaktır.
Sadece son sonucu cihaza alacaktır, bu da daha küçük yük ve daha az veri kullanımıyla sonuçlanacaktır.


Leave a reply

Your email address will not be published.