|
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. |