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.