class GraphQL-PHP ile GraphQL API Geliştirme extends Post

@created_at( "2025-01-20 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](https://webonyx.github.io/graphql-php/) göz atabilirsiniz.