PHP'de GraphQL Uyarlamak: Canlı Kod Örnekleri

PHP'de GraphQL Uyarlamak: Canlı Kod Örnekleri

PHP'de GraphQL uyarlamak için Canlı Kod Örnekleri kitabı ile GraphQL'i öğrenin! Bu kitap, GraphQL'i PHP projenize nasıl entegre edeceğinizi adım adım açıklar Hem başlangıç seviyesindeki için hem de deneyimli geliştiriciler için harika bir kaynaktır Kitapta yer alan canlı kod örnekleri sayesinde GraphQL'i anlamak daha kolay ve keyifli hale gelecek Hemen kitabı satın alın ve projelerinizi GraphQL ile zenginleştirin!

PHP'de GraphQL Uyarlamak: Canlı Kod Örnekleri

Merhaba! Bu makalede, PHP'de GraphQL kullanarak veri sorgulama işlemlerinin nasıl yapılabileceğine dair canlı kod örnekleri paylaşacağız. GraphQL, veri kaynaklarına tek bir API isteği üzerinden sorgu göndererek verileri almak veya değiştirmek için kullanılan bir dildir.

PHP'de GraphQL kullanmak için öncelikle composer kullanarak iki yeni paket yüklemeniz gerekiyor. Ardından, oluşturulan veri tiplerinin, sorgu ve mutasyonların tanımlandığı şema dosyasını oluşturmanız gerekiyor. Bu tipler ve belirteçleri tanıtmak, sorgulama ve mutasyon göndermek için nasıl şema dosyası oluşturulacağını öğrenmek için ayrıntılı paragrafları okuyabilirsiniz.

Ayrıca, bu makalenin sonunda gerçek zamanlı çalışan kod örnekleri paylaşacağız. Bu örnekler, GraphQL ve PHP kullanarak gerçekleştirilen veri sorgulama ve mutasyon işlemlerini göstermektedir.

Bu örnekler sayesinde, GraphQL mantığının ve nerelerde kullanılabileceğinin anlaşılması kolay bir şekilde mümkündür. Bu makale, PHP'ye aşina olan ancak GraphQL kullanmayı bilmeyenler için mükemmel bir kaynak olabilir. Ayrıca, canlı kod örnekleri sayesinde, öğrenme süreci daha da kolaylaşacaktır. Umarız, sizin de beğeneceğiniz bir kaynak olur.


GraphQL Nedir?

GraphQL, web uygulamaları için kullanılan bir sorgu dili ve yürütme ortamıdır. Verileri almak veya değiştirmek için tek bir API isteğiyle birden çok veri kaynağına sorgular göndermek için kullanılır. Bu, REST API'lerine kıyasla daha verimli bir yaklaşım sunar.

GraphQL, bir API'nin sunduğu verileri schema adı verilen bir söz dizimiyle tanımlar. Her bir schema, API tarafından sunulan veri türlerini ve bu türlerin özelliklerini içerir. GraphQL, bu schema'lar üzerinden yapılan sorgulamaları işler ve sonuçları kullanıcılara sunar.

GraphQL, RPC (Uzak Prosedür Çağrısı) tabanlı bir yaklaşımdır. Bu, bir istek gönderildiğinde, birçok farklı kaynaktaki verilerin bir arada toplanarak bir yanıt döndürülmesine izin verir. Bu nedenle, GraphQL'in REST API'lerine göre daha yüksek bir performans ve daha az veri kullanımı sağladığı düşünülmektedir.

Ayrıca, GraphQL, sorguların ve yanıtların tam olarak belirlenmiş bir biçimde olmasını sağlar, bu da uygulamalar arasında daha iyi bir iletişim ve daha kolay bir uyumluluk sağlar.


PHP'de GraphQL Yapılandırması

GraphQL'i PHP projesine entegre etmek oldukça kolaydır. İlk olarak, iki yeni paketin yüklenmesi gerekiyor. Bu paketler, webonyx/graphql-php ve overblog/graphql-bundle paketleri olmalıdır.

Composer kullanarak bu paketleri yükleyebilirsiniz. Kurulum için, önce composer.json dosyasına, yüklenmesi gereken paketlerin isimlerini eklemeniz gerekiyor. Bu adımdan sonra, komut satırına composer install komutunu yazarak paketleri yükleme işlemini gerçekleştirebilirsiniz. Aşağıdaki komut, yükleme işlemini gerçekleştirir:

<?php   // composer.json dosyasına webonyx/graphql-php ve overblog/graphql-bundle ekleyin// paketleri yüklemek için composer install komutunu çalıştırın  ?>

GraphQL ayarlarını yapılandırırken, ilk olarak Schema dosyasını oluşturmanız gerekiyor. Bu dosya, oluşturulan veri tiplerini, sorguları ve mutasyonları tanımlar. Schema dosyası oluşturulduktan sonra, GraphQL sorgularına karşılık veren fonksiyonların tanımlanması gerekiyor. İki paketin de yüklenmesiyle, GraphQL API'si PHP projesinde kullanıma hazır hale gelir.


Kurulum

GraphQL'i PHP projesine entegre etmek için, iki yeni paketin composer yardımıyla yüklenmesi gerekmektedir. İlk önce kurulumu gerçekleştirebilmek için Webonyx/GraphQL-PHP paketinin yüklenmesi gerekir. Kurulum işlemi için aşağıdaki komut satırını kullanabilirsiniz:

composer require webonyx/graphql-php

Komut satırından webonyx/graphql-php paketini eklemek yeterlidir.

Bu işlemden sonra, PHP'de kullanmak istediğiniz dosyalara aşağıdaki gibi dahil etmeniz gerekmektedir;

require_once __DIR__ . '/vendor/autoload.php';

Bu kodu PHP dosyanıza dahil ederek GraphQL'i kullanabilirsiniz.

Paketlerin yüklenmesi ise aynı komut satırı aracılığıyla yapılır ve yüklenen paketlere projenin composer.json dosyası üzerinden ulaşabilirsiniz.


Schema Dosyası Oluşturma

GraphQL'de, veri tipleri ve sorgu/mutasyon tipleri "schema" adı verilen bir dosya içinde tanımlanır. Bu dosya, herhangi bir GraphQL sorgusu için gerekli olan tiplerin neler olduğunu belirler. Bu bölümde, GraphQL şeması oluşturmak için gereken adımlar ele alınacaktır.

GraphQL şeması, şema dili kullanılarak yazılır ve şunları içerebilir:

  • Veri tipleri
  • Sorgu tipi
  • Mutasyon tipi

GraphQL'de, veri tipleri nesne tipleri ve skaler tipler olmak üzere ikiye ayrılır. Nesne tipleri, birden fazla alanı olan veri tipleridir ve bu alanlar yine nesne tipleri veya skaler tipler olabilir. Skaler tipler ise tek bir değer içeren basit veri tipleridir, örneğin String, Int, Float gibi.

Şema dosyası oluşturulurken, öncelikle veri tipleri oluşturulur. Bu tiplerin birbirleri ile olan ilişkileri "type relations" ile tanımlanır. Daha sonra sorgu ve mutasyon tipleri oluşturulur. Bu tipler, veri kaynağına sorgu göndermek veya veri kaynağındaki verileri düzenlemek için kullanılır.

GraphQL şeması, bir programlama dili için kullanılan API belgeleme araçlarına benzer bir işlev görür. Çünkü GraphQL şeması, GraphQL API'nin nasıl kullanılacağına dair bir kılavuz görevi görür ve bu API üzerinden hangi verilerin elde edilebileceği belirtilir. Bu nedenle, iyi yapılandırılmış bir GraphQL şeması, API kullanıcıları için büyük bir fayda sağlar.


Type System

GraphQL'de veriler, tipler olarak tanımlanır ve tüm sorgulama işlemleri bu tiplere göre gerçekleştirilir. Veri tipleri, GraphQL'de çok önemlidir ve her biri farklı bir amaç için kullanılır. Bu tipler, belirli bir sorgu veya mutasyonda kullanılacak verinin şeklini ve boyutunu tanımlamak için kullanılır.

Scalar tipler, GraphQL tarafından önceden tanımlanmış ve tek bir değeri depolayan tiplerdir. Bu tipler arasında String, Int, Float, Boolean ve ID bulunur. Object tipleri ise, birden fazla alan veya özellik içeren verileri temsil eder. Her bir alan, bir skaler tipi veya başka bir nesne tipini içerebilir.

GraphQL'de bulunan diğer tipler arasında Union, Interface ve Enum bulunur. Union tipi, belirli bir tipten birden fazla nesne döndürmek için kullanılırken, Interface tipi, birden çok nesnenin benzer özelliklerini birleştirmek için kullanılır. Enum tipleri ise, belirli bir veri kümesi için sabit değerler listesi sağlar ve bu değerler, verileri daha anlaşılır hale getirmek için kullanılabilir.

GraphQL'de ayrıca, belirli bir sorgu veya mutasyon için gerekli olan verileri sağlamak için argumentler kullanılır. Bu argumentler, bir şablon olarak tanımlanabilir ve daha sonra kullanılabilir. Ayrıca, argumentlerin doğrulanması için input tipleri de kullanılabilir.

GraphQL'de tipler ve belirteçler, verileri tanımlamak ve sorgulamak için son derece önemlidir. Bu tipler hakkında daha fazla bilgi sahibi olmak, GraphQL sorgularını daha etkili hale getirmenize yardımcı olacaktır.


Scalar Types

GraphQL'de veriler, tipler olarak tanımlanır ve tüm sorgulama işlemleri bu tiplere göre gerçekleştirilir. Skaler tipler, yani tek bir değer içerebilen tipler, GraphQL tarafından önceden tanımlanmıştır. Bu tipler arasında String, Int, Float, Boolean ve ID bulunur. String, grafiksel kullanıcı arayüzleri, blog gönderileri ve diğer metin verileri gibi metin tabanlı verileri temsil eder. Bütün sayı tiplerini temsil eden Int tipi, yalnızca tam sayı değerlerini kabul eder. Float tipi, ondalık sayılar ve diğer sayısal verilerin saklanmasına izin verir. Boolean tipi, doğru veya yanlış değerlerini saklar. ID tipi, arka planda benzersiz bir tanımlayıcı olarak kullanılan metin tabanlı bir değerdir.


Object Types

GraphQL'de nesne tipleri, birden fazla alan veya özellik içeren verileri temsil eder. Her bir alan, bir skaler tipi veya başka bir nesne tipini içerebilir. Bu alanlar, resolver fonksiyonları tarafından işlenir ve geri dönüş değeri olarak GraphQL yürütme ortamına gönderilir.

Örneğin, bir kullanıcı profili için bir nesne tipi tanımlayabiliriz. Bu nesne tipi, kullanıcının adı, e-postası ve belki de bir profil resmi gibi alanları içerebilir. Alanlar, skaler tiplerle birlikte veya diğer özel nesne tipleriyle birlikte kullanılabilir.

Nesne Tipi Açıklama Örnek
User Bir kullanıcı profilini temsil eder.
  • id: ID
  • name: String
  • email: String
  • profilePic: Image
Image Bir resim dosyasını temsil eder.
  • url: String
  • width: Integer
  • height: Integer

Bir kullanıcının profil resmi gibi karmaşık verileri temsil etmek için, nesne tipleriyle hiyerarşik bir yapı kurabiliriz. Örneğin, Image nesne tipi, URL'si, büyüklüğü ve genişliği gibi alanları ile birlikte kullanılabilir.

Hem ana nesne tipi hem de iç içe geçmiş nesne tipleri gibi karmaşık veri yapıları, GraphQL sorguları ile kolayca elde edilebilir. Bu da, farklı veri kaynaklarından gelen verilerin tek bir istekte toplanmasını sağlayarak, uygulama performansını artırır.


Argument ve Input Types

GraphQL API'si üzerinde sorgu gönderirken, parametreler olarak argumentler kullanılabilir. Argumentler, bir sorgu veya bir mutasyon için belirli verilerin sağlanmasına izin verir. Ayrıca, input tipleri girdi verilerini doğrulamak için kullanılır. Bu tipler, belirli bir alanın veri yapısını tanımlayan bir yapıya sahiptir.

Argumentler ve input tipleri belirli bir sözdizimine sahiptir. Örneğin, bir alanın adı belirtilirken "ad: String!" formatı kullanılır. Burada "ad" alanı, "String" tipinde ve zorunlu bir alandır. Ayrıca, "!" belirteci ile bu alan, zorunlu bir parametre olarak işaretlenir.

Örnek: Araç: Açıklama:
name: String! name String tipinde zorunlu bir parametre
age: Int age Integer tipinde isteğe bağlı bir parametre

Input tipleri, bir veya daha fazla alanı içerebilir ve her bir alanın tipi ve zorunlu olup olmadığı belirtilebilir. Bir input tipinin tanımı, schema dosyasında belirtilir ve daha sonra sorgularda kullanılır. Bu tipler, veri doğrulaması yapmak için kullanılır ve veritabanı tablolarının tiplerini temsil eder.

  • String: Metin verilerini saklamak için kullanılan bir tip
  • Int: Tam sayıların saklanması için kullanılan bir tip
  • Float: Ondalıklı sayıların saklanması için kullanılan bir tip
  • Boolean: Doğru veya yanlış bilgiyi saklamak için kullanılan bir tip
  • ID: Bir veritabanı öğesini tekil olarak tanımlamak için kullanılan bir tip

GraphQL'in argüman ve input tipleri, verileri doğrulamak ve kullanıcıların istediği şekilde sorgu ve mutasyon çıktıları almasını sağlamak için son derece önemlidir. Bu tipleri doğru kullanarak, API tasarımını daha esnek ve güvenli hale getirebilirsiniz.


Sorgulama ve Mutasyon

GraphQL, hem veri alma hem de değiştirme işlemleri yapmak için kullanılabilir. Sorgular, verileri almak için kullanılırken mutasyonlar verileri değiştirmek için kullanılır.

Query

GraphQL'de sorgular, veri almak için kullanılır. Bir sorgu, belirli bir veri tipini, alanları ve girdileri içerebilir. Sorgular, HTTP POST istekleri olarak gönderilir ve sorgu metni JSON biçimindedir.

Sorgu Yapısı Açıklama
query Bir sorgunun yapıldığını belirtir.
{} Sorgulanan verilerin ve alanların yer aldığı kod bloğudur.

Mutation

Mutasyonlar, GraphQL API'si üzerinden veri değiştirme işlemleri için kullanılır. Bir mutasyon, veritabanındaki verilerde değişiklik yapabilecek bir operasyonu da içerebilir. Mutasyonlar, HTTP POST istekleri olarak gönderilir ve mutasyon metni JSON biçimindedir.

Mutasyon Yapısı Açıklama
mutation Bir mutasyonun yapıldığını belirtir.
{} Mutasyonun gerçekleştirileceği verilerin ve alanların yer aldığı kod bloğudur.

GraphQL, sorgular ve mutasyonlar gibi işlemleri birleştirebileceğiniz karmaşık sorgular da oluşturabilir. Birden fazla sorgu veya mutasyonu bir araya getirerek, bir API isteğiyle tüm verileri alabilir veya değiştirebilirsiniz.


Query

GraphQL API'si üzerinden veri almak için sorgular kullanılır. Bir sorgu, belirli bir veri tipini, alanları ve girdileri içerebilir. Sorgular, ihtiyaç duyulan veriyi sadece bir istekte almayı sağlar. GraphQL, REST API'lerine kıyasla veri taşıma işlemini azaltarak uygulamaların daha hızlı çalışmasını sağlar.

Bir sorgu, anahtar sözcük query ile başlar ve seçilen alanların listesini içerir. Verilerin geri dönüşünü kontrol etmek için kullanılan belirteçler return edilir. Sorgular, GraphQL şema dosyasında tanımlanan veri tiplerine, alanlara ve diğer argümanlara sahip olabilir.

Aşağıdaki örnekte, bir GraphQL API'si üzerinden tüm kullanıcıların adlarını, e-posta adreslerini ve gönderilerinin başlıklarını almak için bir sorguya yer verilmiştir.

query {  users {    name    email    posts {      title    }  }}

Bu sorgu, users ve posts veri tiplerine sahip olacak ve bu veri tiplerinin alanları (name, email, ve title) geri dönecektir. Bir sorgu ayrıca belirli parametrelerin kullanımına izin verir. Örneğin, bir sorguyla bir kullanıcının ID'si belirtilerek sadece o kullanıcının verilerini almak mümkündür.

GraphQL'de, sorguların birden çok seçeneği de mevcuttur. Bu seçenekler, çıktıda hangi alanların görüneceğini belirler. Bu kullanım, gereksiz alanları filtreleme veya kullanıcının ihtiyacına göre veri görüntüleme gibi durumlarda oldukça kullanışlıdır.


Mutation

Mutasyonlar, GraphQL API'si üzerinden verileri değiştirme ya da silme işlemleri için kullanılırlar. Bunların yanı sıra, veritabanındaki verilerde değişiklik yapabilen bir operasyon da içerebilirler. Yani, veritabanında bir öğe eklemek, güncellemek ya da silmek için kullanılabilirler.

Bir mutasyon, bir veya daha fazla alanı, değeri ya da parametreyi belirleyebilir. Örneğin, bir ürün satın alırken müşterinin seçtiği özellikleri belirlemek için bir mutasyon kullanılabilir.

Bir mutasyon, sorgu ile benzer şekilde, bir varsayılan değer döndürmek yerine geriye işlem sonucunu döndürür. Bu dönüş değerinden, başarılı ya da başarısız olma durumu gibi bilgiler alınabilir.

Bir mutasyonu kullanırken, önce mutasyon için gerekli olan veriler sağlanır. Bu veriler, bir sorgu gibi bir parametre listesi şeklindedir. Daha sonra, mutasyonu çalıştırmak için bir sorgu gönderilir.

GraphQL'deki mutasyonlar, REST API'lerindeki gibi belirli bir HTTP kodu dönmezler. Bunun yerine, işlem sonucuna bağlı olarak, döndürdükleri response objesi içerisinde işlem hakkında bilgi alınabilir. Bu obje, herhangi bir özellik içerebilir, ancak en yaygın kullanılan property'ler şunlardır:

  • success: İşlem başarılıysa, bu değer true olarak döner.
  • message: Herhangi bir hata ya da mesajın bu özellikte belirtilebileceği bir alandır.
  • data: İşlem sonucu olarak döndürülecek verileri içeren alandır. Örneğin, bir ürün eklemesi yapıldığında, bu alan, eklenen ürüne ait tüm bilgilerin listesi olabilir.

Mutasyonlar, GraphQL'in en önemli özelliklerinden biridir ve verilerin güncellenmesi için oldukça yararlıdır.


Canlı Kod Örnekleri

Bu bölümde, PHP ve GraphQL kullanarak gerçekleştirilen canlı kod örnekleri sunulacak. İlk örnek, String skaler tipinin değerlerini almak için bir sorgu gönderiyor.

Kod Örneği Açıklama
  $schema = buildSchema('    type Query {      hello: String    }  ');  $rootValue = [    'hello' => 'Merhaba Dünya',  ];  $result = graphql($schema, '{ hello }', $rootValue);  echo json_encode($result);      
Yukarıdaki kod bloğu, "Merhaba Dünya" ifadesini içeren bir sorgu gönderiyor ve sonucu JSON olarak döndürüyor.

Bir diğer örnek ise, toplama işlemi için bir mutasyon gönderiyor. Bu örnek, input tipini ve değişkenleri kullanarak parametreleri doğrulayarak işlem yapmak için hazırlanmıştır.

Kod Örneği Açıklama
  $schema = buildSchema('    type Query {      hello: String    }    type Mutation {      sum(a: Int!, b: Int!): Int!    }  ');  $rootValue = [    'sum' => function ($args) {      return $args['a'] + $args['b'];    },  ];  $result = graphql($schema, '    mutation {      sum(a: 5, b: 10)    }  ', $rootValue);  echo json_encode($result);      
Bu kod bloğu, a ve b parametrelerini alarak toplama işlemini gerçekleştiren bir mutasyon gönderiyor ve sonucu JSON olarak döndürüyor.

Yukarıdaki örnekler, GraphQL kullanarak veri sorgulama ve değiştirme işlemlerinin nasıl gerçekleştirileceğini göstermektedir. Gerçek dünya uygulamalarında, daha karmaşık sorgular ve mutasyonlar kullanılabilir ve GraphQL, tüm veri kaynaklarını tek bir API aracılığıyla yapılandırılmış bir şekilde erişebilir hale getirir.