design

Laravel'de API Resource: Veri Dönüşümü ve Formatlama

April 4, 2025

API geliştirirken verilerinizi nasıl yönetiyorsunuz? Laravel API Resources ile profesyonel veri dönüşümü yapmanın inceliklerini keşfedelim!


1. API Resource Nedir? 🤔

API Resources, Laravel'de veri dönüşüm katmanı olarak çalışır:

  • Veritabanı modelinizi API yanıtına dönüştürür
  • İlişkileri kolayca ekleyebilirsiniz
  • Veri yapısını merkezi olarak yönetir


php artisan make:resource UserResource
php artisan make:resource UserCollection


2. Temel Resource Kullanımı 🛠️

UserResource.php:

class UserResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->full_name,
            'email' => $this->when($request->user()->isAdmin(), $this->email),
            'created_at' => $this->created_at->format('d.m.Y'),
            'links' => [
                'self' => route('users.show', $this->id),
                'profile' => $this->profile_url
            ]
        ];
    }
}


Controller'da Kullanım:

return new UserResource($user);
// Veya koleksiyon için
return UserResource::collection($users);


3. Koşullu Alanlar (Conditional Fields) 🌈

Basit Koşullu Alan

'email' => $this->when($request->user()->isAdmin(), $this->email)


Koşullu İlişki Yükleme

return [
    'posts' => PostResource::collection($this->whenLoaded('posts'))
];


Koşullu Data Merge

$this->mergeWhen($request->user()->isAdmin(), [
    'last_login_ip' => $this->last_login_ip,
    'login_count' => $this->login_count
]);


4. Resource Collection ile Pagination 📚

Özel Collection Oluşturma:

class UserCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'meta' => [
                'total' => $this->total(),
                'per_page' => $this->perPage(),
                'current_page' => $this->currentPage()
            ]
        ];
    }
}


Controller'da Kullanım:

return new UserCollection(User::paginate(20));


5. Veri Dönüşümü için Helper Methodlar 🧰

Tarih Formatlama

'created_at' => $this->created_at->isoFormat('LLLL')


Resim URL'i Oluşturma

'avatar' => $this->avatar ? Storage::url($this->avatar) : null


Özel Hesaplanmış Alan

'is_active' => $this->deleted_at === null


6. API Resource Best Practices 🏆

  1. Transformasyon mantığını controller'dan ayırın
  2. İlişkileri lazy loading ile yükleyin
  3. Sensitive datayı filtreleyin
  4. Meta bilgileri standartlaştırın
  5. HATEOAS linkleri ekleyin


7. Örnek Tam Kapsamlı Resource

class ArticleResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'slug' => $this->slug,
            'content' => $this->when($request->is('api/articles/*'), $this->content),
            'author' => new UserResource($this->whenLoaded('author')),
            'tags' => TagResource::collection($this->whenLoaded('tags')),
            'stats' => $this->when($request->with_stats, [
                'views' => $this->views,
                'likes' => $this->likes_count
            ]),
            'published_at' => $this->published_at->toIso8601String(),
            'links' => [
                'self' => route('articles.show', $this->slug),
                'comments' => route('api.articles.comments.index', $this->id)
            ]
        ];
    }
}


Profesyonel API Yanıtları 🎯

Laravel API Resources ile:

  • Tutarlı yanıt formatları 📐
  • Koşullu veri dönüşümü 🌈
  • Merkezi yönetim 🎛️
  • Daha temiz controller'lar 🧹
API'larınızda hangi veri dönüşüm yöntemlerini kullanıyorsunuz? Yorumlarda paylaşın! 💬
Bir sonraki yazımız: 🚀 [Laravel'de Database Indexing: Performans Optimizasyonu] - Veritabanınızı turbo moduna geçirin!

#Laravel #API #RESTful #WebDevelopment #Backend 🚀

2 + 0 =