Teknik rehber

Laravel API Doğrulama, Yetkilendirme ve Hız Sınırlama: Güvenli ve Ölçeklenebilir Bir API İçin Pratik Rehber

Laravel 13 ve PHP 8.3+ ile API doğrulama, yetkilendirme ve hız sınırlama katmanlarını doğru yapılandırarak güvenli, performanslı ve sürdürülebilir bir API nasıl oluşturulur? Bu rehberde resmi dokümantasyona dayalı, uygulanabilir kod örnekleriyle adım adım anlatıyoruz.

Yazılım geliştirme ve kodlama görseli
Görsel: Unsplash · Görsel kaynağı

Giriş

Modern uygulamalarda API'ler, mobil istemciler, tek sayfa uygulamaları ve üçüncü taraf entegrasyonları için kritik bir rol oynar. Laravel, API geliştirmeyi kolaylaştıran güçlü araçlar sunar: form request doğrulaması, policy ve gate tabanlı yetkilendirme, rate limiting (hız sınırlama) ve daha fazlası. Ancak bu katmanları doğru yapılandırmamak, güvenlik açıklarına, veri sızıntılarına ve performans sorunlarına yol açabilir.

Bu yazıda, Laravel 13 ve PHP 8.3+ sürümlerini temel alarak API doğrulama, yetkilendirme ve hız sınırlama konularını resmi dokümantasyona dayalı olarak ele alacağız. Uygulanabilir kod örnekleriyle her adımı netleştireceğiz.

1. API Doğrulama (Validation)

Laravel'de API isteklerini doğrulamak için Form Request sınıfları kullanmak en temiz ve sürdürülebilir yöntemdir. Bu sınıflar, doğrulama mantığını controller'dan ayırır ve yeniden kullanılabilirlik sağlar.

1.1. Form Request Oluşturma

php artisan make:request StorePostRequest komutuyla bir form request oluşturabilirsiniz. Laravel 13'te bu komut, app/Http/Requests dizininde sınıfı oluşturur.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true; // Yetkilendirme policy ile ayrıca yapılacak
    }

    public function rules(): array
    {
        return [
            'title' => ['required', 'string', 'max:255'],
            'body' => ['required', 'string'],
            'tags' => ['sometimes', 'array'],
            'tags.*' => ['string', 'max:50'],
        ];
    }
}

Controller'da bu request'i tip belirterek kullanabilirsiniz:

public function store(StorePostRequest $request)
{
    $validated = $request->validated();
    // ...
}

Doğrulama başarısız olduğunda Laravel, API istekleri için otomatik olarak 422 Unprocessable Entity yanıtı ve hata detaylarını JSON formatında döndürür.

1.2. Koşullu Doğrulama ve Özel Kurallar

Bazı durumlarda alanların varlığına göre koşullu doğrulama gerekebilir. Rule::when() veya sometimes kuralı kullanılabilir. Ayrıca özel doğrulama kuralları için php artisan make:rule komutuyla kural sınıfları oluşturulabilir.

Resmi dokümantasyon: Laravel 13 Validation

2. API Yetkilendirme (Authorization)

Doğrulama, verinin geçerli olduğunu garanti eder; yetkilendirme ise kullanıcının bu işlemi yapmaya hakkı olup olmadığını belirler. Laravel'de yetkilendirme için Gate ve Policy yapıları kullanılır.

2.1. Policy Tanımlama

php artisan make:policy PostPolicy --model=Post komutuyla bir policy oluşturun. Örnek:

<?php

namespace App\Policies;

use App\Models\Post;
use App\Models\User;

class PostPolicy
{
    public function update(User $user, Post $post): bool
    {
        return $user->id === $post->user_id;
    }
}

Controller'da $this->authorize('update', $post) veya $request->user()->can('update', $post) ile kontrol edebilirsiniz.

2.2. API Kaynakları ve Token Yetkilendirme

API'lerde genellikle token tabanlı kimlik doğrulama kullanılır. Laravel Sanctum veya Passport bu noktada devreye girer. Sanctum ile auth:sanctum middleware'ini kullanarak rotaları koruyabilirsiniz. Token'ların yeteneklerini (abilities) kontrol etmek için tokenCan metodu kullanılabilir.

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Resmi dokümantasyon: Laravel 13 Authorization ve Laravel Sanctum

3. Hız Sınırlama (Rate Limiting)

Hız sınırlama, API'nizi kötüye kullanıma, DDoS saldırılarına ve aşırı yüklenmeye karşı korur. Laravel, RateLimiter facade'ı ve throttle middleware'i ile esnek bir yapı sunar.

3.1. Rate Limiter Tanımlama

App\Providers\RouteServiceProvider (veya Laravel 13'te bootstrap/app.php) içinde rate limiter'ları tanımlayabilirsiniz. Örnek:

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for('api', function (Request $request) {
    return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});

Ardından rotalarda throttle:api middleware'ini kullanın:

Route::middleware(['auth:sanctum', 'throttle:api'])->group(function () {
    Route::get('/posts', [PostController::class, 'index']);
});

3.2. Dinamik ve Gelişmiş Sınırlar

Kullanıcı rolüne göre farklı limitler atayabilirsiniz:

RateLimiter::for('api', function (Request $request) {
    return $request->user()?->isPremium()
        ? Limit::perMinute(200)->by($request->user()->id)
        : Limit::perMinute(60)->by($request->ip());
});

Resmi dokümantasyon: Laravel 13 Rate Limiting

4. Uygulanabilir Örnek: Kısa Bir API Uç Noktası

Aşağıda, doğrulama, yetkilendirme ve hız sınırlamayı bir arada kullanan basit bir POST /api/posts uç noktası örneği verilmiştir.

// routes/api.php
Route::middleware(['auth:sanctum', 'throttle:api'])->group(function () {
    Route::post('/posts', [PostController::class, 'store']);
});

// app/Http/Controllers/PostController.php
public function store(StorePostRequest $request)
{
    $this->authorize('create', Post::class);
    $post = $request->user()->posts()->create($request->validated());
    return new PostResource($post);
}

Bu yapıda:

  • Doğrulama: StorePostRequest ile giriş verileri kontrol edilir.
  • Yetkilendirme: authorize ile kullanıcının post oluşturma yetkisi sorgulanır.
  • Hız sınırlama: throttle:api middleware'i ile dakikada 60 istek sınırı uygulanır.

Sonuç

Laravel 13, API doğrulama, yetkilendirme ve hız sınırlama için kapsamlı ve modern çözümler sunar. Form Request'lerle temiz doğrulama, Policy'lerle esnek yetkilendirme ve RateLimiter ile etkili hız sınırlama katmanları oluşturabilirsiniz. Bu katmanları doğru yapılandırmak, API'nizin güvenliğini, performansını ve sürdürülebilirliğini artırır. Resmi dokümantasyonu takip ederek Laravel'in sunduğu en güncel özelliklerden yararlanmayı ihmal etmeyin.

🍪
Çerez Kullanımı

Kodumun Hatası, web sitesinin çalışmasını sağlamak ve kullanıcı deneyimini geliştirmek için çerezler kullanabilir. Zorunlu olmayan çerezler için tercihlerinizi belirleyebilir, ayrıntılı bilgiye Çerez Politikamızdan ulaşabilirsiniz.