GraphQL Nedir?

GraphQL Nedir?

GraphQL, Facebook tarafından geliştirilmiş bir API sorgulama dili olarak REST API'ye alternatif olmuştur GraphQL ile birden fazla kaynaktan veri alınarak esnek ve ölçeklenebilir bir yapı sağlanabilir Bunun yanı sıra, GraphQL'in performansı, ağ trafiği azaltması ve veri takibi açısından avantaj sağlaması, React gibi modern web uygulama kütüphaneleri ile kullanımını popüler hale getirmiştir Apollo Client ise, React projelerinde GraphQL sorgularının kolayca yapılmasına olanak sağlar Apollo Client'in kurulumu oldukça basittir ve sorguların oluşturulması için gql fonksiyonu kullanılır Sonuçlar, ApolloConsumer aracılığıyla kullanılabilir Overall, GraphQL and Apollo Client provide a modern and efficient solution for data management in web applications

GraphQL Nedir?

GraphQL, Facebook tarafından geliştirilmiş bir API sorgulama dilidir. Web uygulamalarına veri aktarımında kullanılan REST API'lerinin yerine geliştirilmiştir. REST API'lerinde, birden fazla veri isteği yapmak gerekebiliyordu. Ancak GraphQL, tek bir sorgu ile birden fazla kaynaktan veri alınabilmesine olanak sağlar.

GraphQL ile birlikte veri türlerini ve bu türlerin hangi alanlarının kullanılabileceğini belirleyen şema, herhangi bir kaynağın tanımına uygun olarak özelleştirilebilir. Bu özellik, özellikle büyük projelerdeki verilerin yönetimini kolaylaştırır ve esnek bir yapı sağlar.


Neden GraphQL?

İnternet çağında neredeyse her uygulama, birden fazla cihazda çalışabilmesi ve harika kullanıcı deneyimleri sunabilmesi için verileri çağırmak veya paylaşmak zorundadır. REST API'ler, uzun süredir veri paylaşmanın standart yoluydu. Ancak REST API'ler kullanımı zor ve karmaşık hale gelebilir. Bu nedenle, çözüm GraphQL tekniği olarak ortaya çıktı.

GraphQL, REST API'lerin sunduğu işlevselliği ve kullanım kolaylığını bir araya getirerek daha iyi uygulama geliştirme deneyimi sunar. GraphQL, API'den istenilen verileri seçmek ve istemciye özel sorgu şekillendirmek için kullanılır. Bu yöntem, REST API'lerin aksine istemciye gereksiz veri yüklemelerinden kaçınır. Bu nedenle, GraphQL daha verimli ve performanslıdır. GraphQL, API'lerin eşdeğerini kullanırken, kapasiteleri ve ölçeklenebilirliği belirleyici bir faktördür.

Bunun yanı sıra, GraphQL, birden fazla isteği tek bir istekle göndererek işlem süresini azaltabilir. Bu, ağ trafiğinin azaltılmasına yardımcı olur ve mobil uygulama performansını etkisi en aza indirir. Ayrıca, GraphQL herhangi bir platformda kullanılabilir, bu nedenle uygulama geliştiricileri, uygulamaları başka platformlara taşımadan önce GraphQL kullanarak problemleri çözebilirler.

Kısacası, REST API'ler, yeni başlayan geliştiriciler için daha basit olabilirler, ancak daha ölçeklenebilir ve kararlı uygulamalar oluşturmak isteyen geliştiriciler için GraphQL daha iyi bir seçenektir. GraphQL, performansı, kullanıcıların ihtiyaçlarına göre esnekliği ve kolay kullanımı nedeniyle birçok geliştirici tarafından tercih edilmektedir.


React ile GraphQL Kullanımı

React, JavaScript tabanlı bir kütüphanedir ve modern web uygulamaları geliştirmek için kullanılır. GraphQL, API aracılığıyla veri paylaşmak için kullanılan bir sorgu dilidir. React ile GraphQL kullanmak, uygulama geliştiricilerine birçok avantaj sağlamaktadır.

Birincisi, GraphQL sorgu dilinde, tüm istenen veriler belirli bir yapıda alınır. Bu, verilerin düzenli ve okunaklı bir şekilde sunulmasını sağlar ve fazla veri alınmasının önüne geçer. İkinci olarak, React ile GraphQL kullanmak, veri alışverişi sırasında ağ trafiğini azaltır. Bu da uygulamanın daha hızlı ve verimli çalışmasına yardımcı olur.

GraphQL'i React ile kullanmanın bir diğer avantajı, veri değişikliklerini takip etmenizi sağlamasıdır. Veri değişiklikleri oldukça sık gerçekleşir ve bunların takip edilmesi oldukça zor olabilir. GraphQL, değişiklikleri otomatik olarak izler ve React uygulamanıza anında bildirir. Bu da uygulamanızın daha doğru ve kullanışlı olmasını sağlar.

GraphQL, REST API'lerine kıyasla daha avantajlıdır ve React ile kullanılması oldukça kolaydır. Ancak, GraphQL kullanmaya başlamadan önce, GraphQL'in nasıl kullanıldığı ve soruların nasıl yapıldığı hakkında bilgi sahibi olmalısınız. Ayrıca, uygulamanızda Apollo Client veya Relay Modern gibi bir kütüphaneyi kullanmanız gerekebilir.


Apollo Client

Apollo Client, React projelerinde GraphQL sorgularının kolayca yapılmasına olanak tanımaktadır. Apollo Client, veri yönetimi için kullanılabilirken, bu sayede uygulamalarınız artan bir şekilde veri yoğunluğu içerse bile hızlı bir şekilde çalışmaya devam edebilir.

Oluşturulan sorgular, Apollo Client sayesinde otomatik olarak önbellekte tutulabilir. Bu da sonraki kullanımlarda sorguların daha hızlı bir şekilde tamamlanmasını sağlar. Apollo Client ayrıca, sorguların belirli bir zamanda yapılmasını veya parçalarda çekilmesini sağlayabilir. Bu, performans açısından büyük bir artıdır.

Apollo Client'in kurulumu oldukça basittir. İlk olarak, "npm install --save apollo-boost react-apollo graphql" komutu kullanılarak Apollo'ya ait gerekli paketler yüklenir. Ardından, ApolloClient'in oluşturulması gerekiyor. Bu, projenin ana dosyasında yapılabilir. Kod, şu şekildedir:

import ApolloClient from 'apollo-boost';const client = new ApolloClient({  uri: 'https://api.example.com/graphql',});

Bu kodda, isteklerin nereye yapılacağı belirtilir. "uri" alanı, GraphQL sunucusunun adresini alır. Daha sonra, oluşturulan istekler, ApolloProvider olarak adlandırılan bir bileşenin içinde kullanılabilir.

Sorguların oluşturulması için gql fonksiyonu kullanılır. Bu örnekte, bir basit kullanıcı sorgusu gösterilecektir:

import gql from 'graphql-tag';const USER_QUERY = gql`  query User($id: ID!) {    user(id: $id) {      name      surname    }  }`;

Bu kod örneğinde, USER_QUERY adında bir sorgu oluşturulmuştur. Sorguda, bir kullanıcının adı ve soyadı belirtilmiştir. Sorgunun sonuçları, daha sonra kullanılabilir.

Apollo Client ile sorgu sonuçları, Apollo Client tarafından sağlanan ApolloConsumer aracılığıyla kullanılabilir. Bu, herhangi bir bileşenin içinde kullanılabilir.


Apollo Client Kurulumu

Apollo Client, React uygulamalarında GraphQL sorgularının yapılmasına yardımcı olan bir kütüphanedir. Apollo Client kurulumu oldukça basittir ve birkaç adımda gerçekleştirilebilir.

İlk olarak, Apollo Client'i projenize dahil etmeniz gerekir. Bunun için terminale aşağıdaki komutu yazabilirsiniz:

$ npm install apollo-boost react-apollo graphql

Bu komut, Apollo Client için gerekli olan temel kütüphaneleri projenize indirecektir.

Ardından, Apollo Client'inizi oluşturmanız gerekiyor. Bunu yapmak için, projenizin kök dizininde bir dosya oluşturun ve aşağıdaki gibi içeriğini girin:

import ApolloClient from 'apollo-boost';const client = new ApolloClient({  uri: 'https://api.example.com/graphql',});

Bu, verilerinizi alacağınız GraphQL API'nin URI'sini belirler. URI'yi kendiniz belirleyebilirsiniz.

Artık Apollo Client'inizi oluşturdunuz, React uygulamanıza eklemeniz gerekiyor. Bunun için, App.js dosyanızda aşağıdaki gibi bir kod bloğu ekleyin:

import { ApolloProvider } from 'react-apollo';import client from './client';ReactDOM.render(  <ApolloProvider client={client}>    <App />  </ApolloProvider>,  document.getElementById('root'));

Bu kod bloğu, ApolloProvider bileşenini projenize dahil eder ve Apollo Client'ınızı sağlar. Böylece, componentlerinizde GraphQL sorgularını kullanabilirsiniz.

Yukarıdaki adımları tamamladıktan sonra, Apollo Client kullanıma hazır hale gelir ve GraphQL sorgularınızı yapmaya başlayabilirsiniz.


Sorgu Oluşturma

Apollo Client kullanarak sorgu oluşturmak oldukça kolaydır. İlk adım, tanımlamak istediğimiz sorgunun ismini belirlemektir. Bu, aynı zamanda sorgumuzun GraphQL sunucumuzdaki adıdır. Örneğin, bir kitap listesi sorgusu oluşturmak istediğimizi varsayalım ve bu sorguyu "KitapListesiSorgusu" olarak adlandıralım.

Daha sonra, sorgumuzu yürütmek için kullanacağımız değişkenleri belirtmeliyiz. Bu, sorgumuzu daha dinamik hale getirmemize izin verir. Örneğin, kitap sorgumuzda kullanıcıdan kitap türü gibi bir değişken belirtmesini isteyebiliriz. Bunun için, değişkenimizi $KitapTuru olarak adlandırabiliriz.

Bu bilgileri kullanarak, bir sorgu dizesi oluşturabiliriz. Bu dize, GraphQL sorgumuzun tamamını içerecektir. Örneğin, aşağıdaki gibi bir sorgu dizesi oluşturabiliriz:

const KITAP_LISTESI_SORGUSU = gql`  query KitapListesiSorgusu($KitapTuru: String!) {    kitaplar(tur: $KitapTuru) {      isim      yazar      yayinevi    }  }`;

Bu sorgu, "kitaplar" adlı bir nesne çağırır ve "tur" argümanı ile belirtilen kitap türüne göre bir kitap listesi döndürür. Bu sorguyu kullanarak Apollo Client ile bir REST API'den veri talep eder gibi veri sorgulayabiliriz.


Sorgu Sonuçlarını Kullanmak

Apollo Client ile oluşturduğumuz sorgu sonuçlarını kullanmak oldukça basittir. Verilerimiz artık props nesnesinde yer alıyor ve bunları bileşenlerimizin içinde kullanabiliriz. Örneğin, bir kullanıcının adını User bileşenimizde göstermek istiyorsak;

Kod Açıklama
      const User = ({ data }) => {        return (          <div>            <p>Name: { data.name }</p>          </div>        );      }      

data props u içinde bulunan name özelliğini kullanarak kullanıcının adını gösterir.

Burada, data props' unun içindeki name özelliğini kullanarak, kullanıcının adını gösteriyoruz. Ayrıca, sorgu çıktısında birden çok veri türü veya daha fazla veri varsa, bunları bileşenlerimizde de kullanabiliriz. Örneğin, User bileşenimizde kullanıcının fotoğrafını da göstermek istediğimizi varsayalım;

Kod Açıklama
      const User = ({ data }) => {        return (          <div>            <img src={ data.photo } alt="User's Photo"/>            <p>Name: { data.name }</p>          </div>        );      }      

data props u içinde bulunan photo özelliğini bileşen içinde img etiketi olarak kullanarak, kullanıcının fotoğrafını gösterir.

Bu şekilde, bileşenlerimizde GraphQL sorgusundan aldığımız tüm verileri kullanabilir ve kullanım amacımıza göre farklı bileşenler oluşturabiliriz. Sorgu sonuçlarını kullanma konusunda dikkat edilmesi gereken en önemli nokta, veri yapısıdır. Sorgu sonuçlarımızda bulunan verileri çıktıdaki veri yapısıyla eşlememize dikkat etmeliyiz. Aksi halde, props nesnemizde beklenmedik hatalar alabiliriz.


Relay Modern

Relay Modern, GraphQL ile çalışan React uygulamaları için bir çerçeve olarak tasarlanmıştır. Apollo Client gibi bir istemci kütüphanesi olmasına rağmen, GraphQL sorguları için daha özelleştirilmiştir. Relay Modern, veri yönetimini basitleştirmek ve performansı artırmak için tasarlanmıştır.

Relay Modern kurulumu oldukça kolaydır. İlk önce, React uygulamanıza Relay Paketini yükleyin. İkinci olarak, Relay tarafından sağlanan Babel plugin'ini ekleyin. Son olarak, Relay'in istemcisi için bir bağlantı yapısı oluşturun. Bu yapıt, Relay'in verileri istemciye nasıl göndereceğini ve aldığınız yanıtı nasıl işleyeceğinizi gösterir.

Relay Modern hakkında bilinmesi gereken en önemli kavramlardan biri de "fragment"dir. Fragment, istediğiniz verileri seçmek için kullanılan bir GraphQL özelliğidir. Bu, sadece ihtiyacınız olan verileri sorgulamanıza olanak tanır ve gereksiz veri alımını en aza indirir.

Son olarak, Relay Modern ile verileri kullanmak oldukça kolaydır. Sorgunun yanıtı genellikle bir veri grafiği formatında gelir, bu nedenle sonuca ulaşmak için yanıtı uygun şekilde ayrıştırmanız gerekir. Relay Modern, bu işlemi otomatikleştirir ve size daha kullanışlı bir veri nesnesi sunar. Bu nedenle, verilerinizle çalışmak çok daha kolaydır.

Sonuç olarak, Relay Modern, GraphQL kullanarak React uygulamalarında verimli bir şekilde çalışmak için tasarlanmış bir çerçeve sunar. Apollo Client gibi başka istemci kütüphaneleri de mevcut olsa da, Relay Modern'in sunduğu özellikler performansı ve veri yönetimini basitleştirmeyi sağlar.


Relay Modern Kurulumu

Relay Modern, Facebook tarafından geliştirilen bir GraphQL istemcisidir. Kurulumu oldukça basittir. İlk adım olarak, proje sayfanıza Relay Modern'ı dahil etmeniz gerekir.

Bunun için aşağıdaki komutu kullanabilirsiniz:

npm Yarn
npm install --save react-relay yarn add react-relay

Sonraki adım olarak, Relay Modern ve GraphQL bağlantısını ayarlamalısınız. Bu adım, GraphQL sunucusunun URL'ini React uygulamanızda kullanabileceğiniz bir GraphQL istemcisi oluşturmak için kullanılır.

Bunun için birkaç seçenek vardır. İsterseniz, apollo-link-schema gibi bir araçla test ortamında bir GraphQL sunucusu oluşturabilirsiniz. Alternatif olarak, bir gerçek sunucu kullanabilirsiniz.

Son olarak, Relay Modern'ı kullanmaya başlamak için komponentleri güncellemelisiniz. Bunu yapmak için aşağıdaki adımları izleyin:

  • RelayEnvironmentProvider komponentini uygulamanıza ekleyin.
  • RelayModernEnvironment ile yeni bir Relay çevresi oluşturun.
  • useFragment, usePagination, useQuery ve useMutation gibi istemci kancalarını kullanarak kaynakları tanımlayın ve ilişkilendirin.
  • Gövde işlevinde, veri yüklemek için kullanacakları bu kancaları çağırmak için kodu yazın.

Bu adımları izledikten sonra Relay Modern, uygulamanızda sorunsuz bir şekilde çalışmaya hazır olacaktır.


Fragment Kullanımı

Fragmentler, GraphQL sorgularının sonuçlarında kullanılmak üzere birimler halinde tanımlanabilirler. Bu, herhangi bir sorguda sadece belirli bir veri setinin kullanılmasına izin verir. Bu, gereksiz verilerin tahsis edilmesini ve taşınmasını önler.

Relay Modern, fragmentleri kullanarak sorguların daha spesifik hale getirilmesine yardımcı olur. Bu sayede, sorgulardaki gereksiz veriler en aza indirilmiş olur. Fragmentler, sorguların spesifik kısımlarında kullanılabilen birimlerdir.

Relay Modern'da fragmentler, sorgu belgesinde belirtilen alanlara göre sınıflandırılır ve kullanılır. Bu, sorguların daha az veri taşımasını ve daha hızlı çalışmasını sağlar. Ayrıca, kodun daha kolay okunmasını ve bakımını da sağlar.

Bir fragment tanımlamak için, fragment anahtar kelimesi kullanılır. Örnek olarak, bir kullanıcının adını ve soyadını alan bir fragment şu şekilde tanımlanabilir:

  fragment UserFragment on User {  firstName  lastName}  

Bu fragment, "User" veri tipi için "firstName" ve "lastName" alanlarını tanımlamaktadır. Bu fragment, bir sorguda kullanılabilir ve sadece bu alanları getirecektir.

Bir sorgudaki fragment kullanımı, fragment anahtar kelimesini kullanarak ve adını belirterek yapılır. Örnek olarak:

  query GetUser {  user(id: 1) {    ...UserFragment  }}  

Bu sorgu, "User" veri tipi için "UserFragment" fragmentini kullanarak sadece "firstName" ve "lastName" alanlarını getirir.


Datalarımızla Çalışma

Sorgu sonuçları alındıktan sonra, bu verileri kullanmak için birkaç seçenek vardır. Apollo Client'ta veriler, şema tarafından sağlanan yapısal tipleri kullanılarak isteğe bağlı olarak işlenebilir veya Apollo Client'in mevcut veri deposuna yazılabilir. Bu yapılandırma, ayrıntılı olarak sorulabilen sorular ve GraphQL'in benzersiz özelliklerinden yararlanan dinamik veri çözümlemesi için mükemmeldir.

Relay Modern'de, veriler genellikle `Fragment` adı verilen yapılarla tanımlanır. Fragmanlar, GraphQL sorgusu tarafından geri döndürülen herhangi bir tipteki alanlara erişebilir ve bunları somutlaştırarak tip garantili bir şekilde React bileşenlerinde kullanılabilir hale getirir. İstek sonuçlarında alınan verileri kullanmak için yapılan yapılması gereken tek şey, React bileşenlerinin sadece istenen alanlara mevcut olan props bilgisi göndermesini sağlamaktır.


Hangi Yaklaşımı Kullanmalısınız?

GraphQL'in React ile kullanımı konusunda, kullanabileceğiniz iki ana araç vardır: Apollo Client ve Relay Modern. Her ikisi de React ile uyumlu bir şekilde çalışır, ancak aralarında bazı farklılıklar vardır.

Apollo Client, kullanımı daha kolaydır ve daha az kod yazmanızı sağlar. Ayrıca, Apollo Client ile GraphQL sorgularını kolayca yapabilir ve sonuçları kullanabilirsiniz. Öte yandan, Relay Modern, daha performans odaklıdır ve daha büyük projeler için daha uygundur. Ayrıca, Relay Modern kullanarak daha verimli bir şekilde kod yazabilirsiniz

Birçok geliştirici, Apollo Client'i tercih eder, çünkü kullanımı daha kolaydır ve daha hızlı sonuç alırlar. Ancak, büyük ölçekli projeler için, Relay Modern'ın performans avantajlarından yararlanmak daha iyi olabilir.

Hangi yaklaşımı kullanacağınız, projenizin gereksinimlerine ve boyutuna bağlı olacaktır. Apollo Client, küçük ve orta ölçekli projelerde daha uygun olabilirken, daha büyük projeler için Relay Modern kullanmak daha iyi bir seçim olabilir.

Bu nedenle, projenizi analiz etmek ve ihtiyaç duyduğunuz özelliklere göre kullanacağınız yaklaşımı seçmek en mantıklı yoldur. Unutmayın, her proje farklıdır ve hangi yaklaşımın daha iyi olduğu, projenizin spesifikasyonlarına bağlıdır.