design

Laravel'de GraphQL Kullanımı: Modern API Geliştirme

March 24, 2025

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ü:

  1. Eloquent ORM ile kolay entegrasyon
  2. Güçlü yetkilendirme sistemi
  3. 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ı

  1. Hızlı Geliştirme: Schema-first yaklaşımı
  2. Esnek Sorgular: İstemci ihtiyacına göre veri
  3. Güçlü Tip Sistemi: Runtime hatalarını önleme
  4. Otomatik Dokümantasyon: GraphQL Playground
  5. 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!

6 + 0 =