Sitemize hoşgeldiniz!  ::  Son eklenen yazı: Git’te “master” mı “main” mi? Bir kelimenin ardındaki hikâye  ::  Toplam 63 yazı  ::  Görüş ve önerileriniz için iletişim sayfasını kullanabilirsiniz.
» Menü
Anasayfa
Hakkımda
İletişim
» Kategoriler
› nostalji (8)
› laravel (7)
› php (5)
› web (3)
› agile (3)
› go (2)
› golang (2)
› api (2)
› redis (2)
› git (2)
› github (2)
› model (1)
» Arşiv
› Ekim 2025 (2)
› Temmuz 2025 (1)
› Nisan 2025 (3)
› Mart 2025 (5)
› Şubat 2025 (1)
› Ocak 2025 (43)
› Haziran 2011 (1)
› Kasım 2009 (1)
› Temmuz 2009 (1)
› Temmuz 2007 (1)
› Ocak 2007 (1)
› Kasım 2006 (1)
› Ekim 2006 (1)
› Ağustos 2006 (1)
Anasayfa » Yazılar » GraphQL-PHP ile GraphQL API Geliştirme
GraphQL-PHP ile GraphQL API Geliştirme
Yazan: Atilla Mutlu | Tarih: 20.01.2025 07:03

GraphQL-PHP, PHP'de GraphQL API'leri oluşturmak için kullanılan güçlü bir kütüphanedir. Facebook'un geliştirdiği GraphQL standardını destekler ve PHP uygulamalarınızda veri sorgulama ve manipülasyon işlemlerini kolaylaştırır. Bu yazıda, GraphQL-PHP'nin kurulumu, temel bileşenleri ve örnek bir API geliştirme süreci anlatılmaktadır.


GraphQL Nedir?

GraphQL, istemcilerin bir API'den tam olarak ihtiyaç duydukları veriyi sorgulamalarına olanak tanıyan bir sorgulama dilidir. REST'e alternatif olarak geliştirilen GraphQL'in temel avantajları şunlardır:

  • Tek uç nokta: Tüm sorgular ve işlemler tek bir uç nokta üzerinden yapılır.
  • Gereksiz veri yok: İstemciler yalnızca ihtiyaç duydukları alanları alır.
  • Tip güvenliği: Şema tanımları sayesinde veri tipleri kontrol edilir.

GraphQL-PHP'nin Kurulumu

GraphQL-PHP kütüphanesini projeye dahil etmek için Composer kullanabilirsiniz:

composer require webonyx/graphql-php

Bu komut, projeye GraphQL-PHP kütüphanesini yükler.


Temel Kavramlar

GraphQL-PHP, GraphQL şemalarını ve işlemlerini oluşturmak için aşağıdaki bileşenleri kullanır:

1. Schema (Şema)

Şema, GraphQL API'nin veri yapısını ve desteklediği işlemleri tanımlar.

2. Type (Tür)

GraphQL'de türler, API'nin sunduğu verilerin yapılarını tanımlar. Örneğin:

  • Query türü: Veri sorgulamak için kullanılır.
  • Mutation türü: Veri üzerinde işlem yapmak için kullanılır.
  • ObjectType, ScalarType, InputType gibi türler kullanılabilir.

3. Resolver (Çözücü)

Çözücüler, GraphQL sorgularını yürütmek için gerekli iş mantığını barındırır. Her alan için bir çözücü fonksiyon tanımlanabilir.


Örnek API Geliştirme

Adım 1: Şema ve Türlerin Tanımlanması

Bir "kullanıcı" verisi için şema ve türler tanımlayalım.

Kullanıcı Türü

use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;

$userType = new ObjectType([
    'name' => 'User',
    'fields' => [
        'id' => Type::nonNull(Type::int()),
        'name' => Type::string(),
        'email' => Type::string(),
    ],
]);

Query Türü

$queryType = new ObjectType([
    'name' => 'Query',
    'fields' => [
        'user' => [
            'type' => $userType,
            'args' => [
                'id' => Type::nonNull(Type::int()),
            ],
            'resolve' => function ($root, $args) {
                // Örnek veri
                $users = [
                    1 => ['id' => 1, 'name' => 'Ahmet', 'email' => 'ahmet@example.com'],
                    2 => ['id' => 2, 'name' => 'Ayşe', 'email' => 'ayse@example.com'],
                ];

                return $users[$args['id']] ?? null;
            },
        ],
    ],
]);

Şema Tanımı

use GraphQL\Type\Schema;

$schema = new Schema([
    'query' => $queryType,
]);

Adım 2: Sorguların İşlenmesi

GraphQL isteklerini ele alalım.

İstek İşleme

use GraphQL\GraphQL;
use GraphQL\Error\Error;

try {
    $rawInput = file_get_contents('php://input');
    $input = json_decode($rawInput, true);
    $query = $input['query'];
    $variableValues = $input['variables'] ?? null;

    $result = GraphQL::executeQuery($schema, $query, null, null, $variableValues);
    $output = $result->toArray();
} catch (Error $error) {
    $output = [
        'errors' => [
            [
                'message' => $error->getMessage(),
            ],
        ],
    ];
}

header('Content-Type: application/json');
echo json_encode($output);

Adım 3: Sorgu Gönderme

Bir GraphQL istemcisi (ör. GraphiQL, Postman) kullanarak aşağıdaki sorguyu çalıştırabilirsiniz:

Örnek Sorgu

query GetUser {
  user(id: 1) {
    id
    name
    email
  }
}

Yanıt

{
  "data": {
    "user": {
      "id": 1,
      "name": "Ahmet",
      "email": "ahmet@example.com"
    }
  }
}

İleri Düzey Özellikler

1. Mutation

Veri üzerinde değişiklik yapmak için mutation tanımlayabilirsiniz:

$mutationType = new ObjectType([
    'name' => 'Mutation',
    'fields' => [
        'createUser' => [
            'type' => $userType,
            'args' => [
                'name' => Type::nonNull(Type::string()),
                'email' => Type::nonNull(Type::string()),
            ],
            'resolve' => function ($root, $args) {
                return [
                    'id' => rand(1, 1000),
                    'name' => $args['name'],
                    'email' => $args['email'],
                ];
            },
        ],
    ],
]);

$schema = new Schema([
    'query' => $queryType,
    'mutation' => $mutationType,
]);

Örnek Mutation

mutation CreateUser {
  createUser(name: "Ali", email: "ali@example.com") {
    id
    name
    email
  }
}

Sonuç

GraphQL-PHP, GraphQL API'lerini PHP ile geliştirmek isteyenler için esnek ve güçlü bir araçtır. Yukarıdaki adımları takip ederek hızlıca bir GraphQL API oluşturabilir ve ihtiyaçlarınıza göre özelleştirebilirsiniz. Daha fazlasını öğrenmek için GraphQL-PHP belgelerine göz atabilirsiniz.

« Geri dön | Yorum gönder | Yukarı ↑
» Hakkımda
A
Atilla Mutlu
Yazılım Geliştirici

Devamını oku »
» Son Yazılar
› Git’te “master” mı “main” mi? Bir kelimenin ardındaki hikâye
› Laravel Model Controller
› PostgreSQL Mini‑Kılavuz
› ReactJS Rehberi
› Spatie Laravel Paketleri
» İstatistik
Ziyaretçi Sayısı
036356
Toplam yazı: 63
PHPpowered SQLiteinside Firefoxile daha iyi CSStables ♥
Bu site en iyi 1024x768 çözünürlükte görüntülenir.
Copyright © 2006-2026
Anasayfa | Hakkımda | İletişim | Yukarı ↑
Bu sayfa 0,012 saniyede oluşturuldu.