Merhaba arkadaşlar, bugün sizlerle Laravel'de GraphQL kullanımını detaylı şekilde inceleyeceğiz. REST API'lerin sınırlarını aşmak ve daha esnek bir API yapısı kurmak istiyorsanız, GraphQL tam size göre. Laravel ile nasıl güçlü GraphQL API'leri geliştirebileceğinizi adım adım anlatıyorum.
GraphQL Nedir? Neden Laravel ile Kullanmalıyız?
GraphQL, Facebook tarafından geliştirilen bir sorgu dilidir. Avantajları:
- Tek istekte istediğiniz veriyi alabilirsiniz
- Aşırı-veri yüklemesi (over-fetching) sorunu yok
- Güçlü tip sistemi ile daha güvenli
- Otomatik dokümantasyon desteği
Laravel ile GraphQL mükemmel uyum sağlar çünkü:
- Eloquent ORM ile kolay entegrasyon
- Güçlü yetkilendirme sistemi
- Performans optimizasyonu imkanları
Lighthouse Paketi Kurulumu
Laravel'de GraphQL için en popüler paket Lighthouse:
composer require nuwave/lighthouse
Temel yapılandırma:
php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider"
İlk GraphQL Şemanızı Oluşturma
graphql/schema.graphql dosyasını düzenleyelim:
type Query {
users: [User!]! @all
user(id: ID! @eq): User @find
}
type User {
id: ID!
name: String!
email: String!
created_at: String!
updated_at: String!
}
Bu basit şema:
- Tüm kullanıcıları listeler
- ID'ye göre tek kullanıcı getirir
Örnek GraphQL Sorguları
1. Tüm kullanıcıları çekme:
query {
users {
id
name
email
}
}
2. Belirli bir kullanıcıyı getirme:
query {
user(id: 1) {
name
email
}
}
3. İlişkili verileri çekme (Post-User ilişkisi):
type User {
posts: [Post!]! @hasMany
}
query {
users {
name
posts {
title
content
}
}
}
Mutation ile Veri Değiştirme
Veri ekleme/güncelleme örneği:
type Mutation {
createUser(
name: String! @rules(apply: ["required", "min:3"])
email: String! @rules(apply: ["email", "unique:users"])
password: String! @rules(apply: ["min:6"])
): User @create
}
Kullanımı:
mutation {
createUser(
name: "Ahmet Yılmaz"
email: "ahmet@example.com"
password: "sifre123"
) {
id
name
}
}
Performans Optimizasyonu
1. N+1 Problemini Çözme:
type User {
posts: [Post!]! @hasMany @withCount
}
query {
users {
name
posts_count
}
}
2. Pagination (Sayfalama):
type Query {
posts(
page: Int @paginate
): [Post!]! @paginate(type: "paginator" model: "App\\Models\\Post")
}
Yetkilendirme ve Doğrulama
1. Yetkilendirme:
type Mutation {
deletePost(id: ID!): Post @delete @can(ability: "delete", model: "App\\Models\\Post")
}
2. Doğrulama Kuralları:
type Mutation {
updateUser(
id: ID!
name: String @rules(apply: ["min:3"])
email: String @rules(apply: ["email", "unique:users,email,{{id}}"])
): User @update
}
Özel Directive Oluşturma
Kendi iş mantığınız için özel directive:
php artisan lighthouse:directive --field CustomFormat
namespace App\GraphQL\Directives;
use Nuwave\Lighthouse\Schema\Directives\BaseDirective;
class CustomFormatDirective extends BaseDirective
{
public function handle($value, $args)
{
return strtoupper($value);
}
}
Kullanımı:
type User {
name: String! @customFormat
}
Laravel + GraphQL Avantajları
- Hızlı Geliştirme: Schema-first yaklaşımı
- Esnek Sorgular: İstemci ihtiyacına göre veri
- Güçlü Tip Sistemi: Runtime hatalarını önleme
- Otomatik Dokümantasyon: GraphQL Playground
- Performans: Eager loading optimizasyonu
Laravel ile GraphQL kullanarak modern, esnek ve yüksek performanslı API'ler geliştirebilirsiniz. Lighthouse paketi sayesinde GraphQL'in tüm gücünü Laravel ekosisteminde kullanabilirsiniz.Bir sonraki yazımızda Laravel'de Unit Test ve Feature Test Yazma Rehberi konusunu ele alacağız. Görüşmek üzere!
+(31).png&w=320&q=50)


