Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel Query Gate ile Dakikalar İçinde Tam REST API’leri Oluşturun
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel Query Gate ile Dakikalar İçinde Tam REST API’leri Oluşturun

Yazılım

Laravel Query Gate ile Dakikalar İçinde Tam REST API’leri Oluşturun

teknomers
Son güncelleme: 15 Ocak 2026 09:46
teknomers
Paylaş
Paylaş

Tüm Laravel geliştiricileri bu düzene aşinadır: bir model oluştur, bir controller yaz, route tanımla, validasyon ekle, filtreleme, paginasyon, sıralama implement et… her bir varlık için bunu tekrar et.

Daha iyi bir yol olduğunu söylesem?

Ben Laravel Query Gate üzerinde çalışıyorum. Bu paket API’leri nasıl oluşturduğunuzu dönüştürüyor. Tekrar eden boilerplate kod yazmak yerine, istediğinizi tanımlıyorsunuz — ve Query Gate geri kalanını hallediyor.

Size Gönderi, Yorum, Kategori, Etiket, Kimlik Doğrulama, Özel Eylemler ve API Sürümleme içeren tam bir blog API’si oluşturmak için nasıl bir yol izlediğimi göstereceğim — tek bir controller yazmadan.


Hepimizin Karşılaştığı Sorun

Tipik bir Laravel API kurulumu şöyle görünür:

// PostController.php - Yazacağınız birçok controller'dan sadece BİRİ
class PostController extends Controller
{
    public function index(Request $request)
    {
        $query = Post::query();

        if ($request->has('status')) {
            $query->where('status', $request->status);
        }
        if ($request->has('category_id')) {
            $query->where('category_id', $request->category_id);
        }
        if ($request->has('author')) {
            $query->whereHas('author', fn($q) => $q->where('name', 'like', "%{$request->author}%"));
        }
        // ... 20 daha fazla filtre

        if ($request->has('sort')) {
            // ayrıştırma mantığı...
        }

        return $query->paginate($request->per_page ?? 15);
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'title' => 'required|string|max:255',
            'content' => 'required|string',
            // ... daha fazla kural
        ]);

        return Post::create($validated);
    }

    // update(), destroy(), show()... fikri anladınız
}

Şimdi bunu uygulamanızdaki her model için çarpın. Bu çok yorucu.


Query Gate Yöntemi

Aynı işlevselliği Laravel Query Gate ile şöyle yapabilirsiniz:

// app/Models/Post.php
class Post extends Model
{
    use HasQueryGate;

    public static function queryGate(): QueryGate
    {
        return QueryGate::make()
            ->alias('posts')
            ->middleware(['auth:sanctum'])
            ->filters([
                'status' => ['string', 'in:draft,published,archived'],
                'category_id' => 'integer',
                'author.name' => ['string', 'max:100'],
                'created_at' => 'date',
            ])
            ->allowedFilters([
                'status' => ['eq', 'in', 'neq'],
                'category_id' => ['eq', 'in'],
                'author.name' => ['like'],
                'created_at' => ['gte', 'lte', 'between'],
            ])
            ->select(['id', 'title', 'slug', 'status', 'created_at', 'author.name'])
            ->sorts(['created_at', 'title'])
            ->actions(fn ($actions) => $actions
                ->create(fn ($action) => $action
                    ->validations([
                        'title' => ['required', 'string', 'max:255'],
                        'content' => ['required', 'string'],
                    ])
                )
                ->update()
                ->delete()
            );
    }
}

Hepsi bu kadar. Hiçbir controller yok. Hiçbir route yok. Tekrar eden kod yok.

Query Gate size otomatik olarak şu işlevleri sunar:

GET    /query/posts              → Filtrelerle, sıralama, paginasyon ile listele
GET    /query/posts/{id}         → Tekil gönderiyi göster
POST   /query/posts              → Gönderi oluştur
PATCH  /query/posts/{id}         → Gönderiyi güncelle
DELETE /query/posts/{id}         → Gönderiyi sil


Gerçek Dünya Örneği: Tam Bir Blog API’si

Query Gate’in neler yapabileceğini göstermek için tam bir örnek proje oluşturdum. İşte içindekiler:


1. Gelişmiş Filtreleme

Herhangi bir alanla filtreleyin ve eq, neq, like, in, between, gt, gte, lt, lte gibi operatörler kullanın:

# 2024'te yayımlanan gönderiler
GET /query/posts?filter[published_at][between]=2024-01-01,2024-12-31

# Belirli etiketlere sahip gönderiler
GET /query/posts?filter[tag_slugs][in]=laravel,php

# 1000+ görüntülenmeye sahip, popülerlik sırasına göre sıralı gönderiler
GET /query/posts?filter[views_count][gte]=1000&sort=views_count:desc


2. İlişki Filtreleme

Nokta notasyonu kullanarak ilişkileri sorgulama:

# Yazar adına göre gönderiler
GET /query/posts?filter[author.name][like]=John

# Yayımlanan gönderiler üzerindeki yorumlar
GET /query/comments?filter[post.status][eq]=published


3. Özel Eylemler

CRUD’dan fazlasına mı ihtiyacınız var? Özel eylemler tanımlayın:

// app/Actions/QueryGate/Posts/PublishPost.php
class PublishPost extends AbstractQueryGateAction
{
    public function action(): string
    {
        return 'publish';
    }

    public function handle($request, $model, array $payload)
    {
        $model->update([
            'status' => 'published',
            'published_at' => now(),
        ]);

        return ['message' => 'Gönderi yayımlandı!', 'post' => $model];
    }

    public function authorize($request, $model): ?bool
    {
        return $request->user()->can('update', $model);
    }
}

Artık şunlara sahipsiniz:

POST /query/posts/1/publish

Ö example’da şunlar için eylemler var: Yayımla, Yayından Kaldır, Arşivle, Öne Çıkar, Öne Çıkarmayı Kaldır, Gönderileri Kopyala ve Onayla, Reddet, Spam Olarak İşaretle yorumlar.


4. API Sürümleme (Evet, Yerleşik!)

Mevcut istemcileri bozmadan API’nizi geliştirin:

QueryGate::make()
    ->version('2024-01-01', function (QueryGate $gate) {
        $gate->filters([=> , => ])
             ->select([, , ]);
    })
    ->version(, function (QueryGate $gate) {
        $gate->filters([
            => ,
            => ,
            => ,  // 2025'te yenidir!
            => ,   // 2025'te yenidir!
        ])
        ->select([, , , , ]);
    });

İstemciler sürümlerini seçebilir:

GET /query/posts -H "X-Query-Version: 2024-01-01"

Ve bir değişiklik günlüğü uç noktası da var:

GET /query/posts/__changelog


5. Otomatik OpenAPI Dokümantasyonu

Query Gate, OpenAPI/Swagger dokümanlarını otomatik olarak oluşturur:

GET /query/docs      → Etkileşimli dokümantasyon arayüzü
GET /query/docs.json → OpenAPI JSON spesifikasyonu

Manuel bir dokümantasyon yok. Her zaman kodunuzla senkronizedir.


Hızlı Başlangıç

Denemek mi istiyorsunuz? İşte nasıl başlayacağınız:


Paketi Yükleyin

composer require behindsolution/laravel-query-gate


Modelinize Trait Ekleyin

use BehindSolution\LaravelQueryGate\Traits\HasQueryGate;
use BehindSolution\LaravelQueryGate\Support\QueryGate;

class Post extends Model
{
    use HasQueryGate;

    public static function queryGate(): QueryGate
    {
        return QueryGate::make()
            ->alias()
            ->filters([=> , => ])
            ->allowedFilters([=> [], => []])
            ->actions(fn ($a) => $a->create()->update()->delete());
    }
}


Konfigüre Kaydedin

// config/query-gate.php
=> [
    App\Models\Post::class,
],

Tamam. Artık tamamen işlevsel bir REST API’niz var.


Örnek Projeyi Deneyin

Her şeyin çalıştığını görmek için tam örneği klonlayın:

git clone [email protected]:behindSolution/LQG-example.git
cd LQG-example
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
php artisan serve

Dahil edilen Postman koleksiyonunu içe aktarın ve keşfetmeye başlayın.


Bunu Neden Yaptım

Her proje için aynı kodu tekrar tekrar yazmaktan yoruldum. Her proje şunları gerektiriyordu:

  • Filtreleme mantığı
  • Sıralama mantığı
  • Paginasyon
  • Validasyon
  • Yetkilendirme kontrolleri
  • API sürümleme (şansınız varsa)
  • Dokümantasyon (zaman varsa)

Query Gate, tüm bunları açıklayıcı bir şekilde yönetiyor. Siz iş mantığınıza odaklanıyorsunuz, boilerplate’a değil.


Sonra Ne Olacak?


Herhangi bir sorunuz veya geri bildiriminiz mi var? Aşağıya bir yorum bırakın ya da GitHub’da bir sorun açın. Projelerinizde Query Gate’i nasıl kullandığınızı duymak isterim!

Eğer bu size zaman kazandırdıysa, repo’ya bir yıldız vermeyi düşünün. Bu, daha fazla geliştiricinin projeyi keşfetmesine yardımcı olur.

Kaynak: Orijinal Makale

Contents
  • Hepimizin Karşılaştığı Sorun
  • Query Gate Yöntemi
  • Gerçek Dünya Örneği: Tam Bir Blog API’si
    • 1. Gelişmiş Filtreleme
    • 2. İlişki Filtreleme
    • 3. Özel Eylemler
    • 4. API Sürümleme (Evet, Yerleşik!)
    • 5. Otomatik OpenAPI Dokümantasyonu
  • Hızlı Başlangıç
    • Paketi Yükleyin
    • Modelinize Trait Ekleyin
    • Konfigüre Kaydedin
  • Örnek Projeyi Deneyin
  • Bunu Neden Yaptım
  • Sonra Ne Olacak?
Laravel’de Takım Davetiyeleri Oluşturma
Benimle Ürün Geliştirecek Bir Kurucu Mühendis Arıyorum
Laravel’de Sanctum ile CRUD API Oluşturma (Adım Adım)
Laravel AI SDK: Değişiklikleri, Önemi ve Kullanmalı Mısınız?
PHP Ölmedi. Aksine – Verilerin Gösterdiği Gerçekler Şunlar
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Gmail, Fotoğraflar ve Arama ile Gemini: Kritik Kişisel Zeka Bağlantısı
Sonraki Makale Microsoft, Kritik RedVDS Siber Suç Ağına Son Verdi!

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Porsche Cayenne Coupe Turbo 911 Sahiplerini Endişelendirecek mi?
Liste
2026 EveryPlate Yemek Kiti İncelemesi: Uygun Fiyat, Kolaylık ve Lezzet
Genel
Jensen Huang: Her kenar cihazı özerk hale gelecek — Nvidia’nın buluttan robotiğe yol haritası
Donanım
Teknomers olarak başlık önerim: Deadlock’un Soul Urn’u Yenilendi: Sıra Dışı Değişiklikler Geliyor
Oyun
Apple’ın Yeni AirPods’unda Neden Kamera Olabilir? Gizemli Kullanım Alanları!
Genel
Indiana belediye başkanının yapay zeka merkezi protestocuları hakkında skandal sözleri
Donanım
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?