Sarıkaya Dev Logo

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

Mahmut Sarıkaya 2 min read 903 Views 0
Laravel'de API Resource: Veri Dönüşümü ve Formatlama

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 🚀

Tags: #Laravel #Dependency Injection #Laravel Service Container #Laravel IoC Container #Laravel Bağımlılık Enjeksiyonu #Laravel Service Provider #Laravel Bind Method #Laravel Singleton #Laravel Interface Binding #Laravel Automatic Resolution #Laravel Constructor Injection #Laravel Method Injection #Laravel Service Resolution #Laravel Repository Pattern #Laravel SOLID Principles #Laravel Loose Coupling #Laravel Inversion of Control #Laravel Dependency Management #Laravel Container Binding #Laravel App Helper #Laravel Service Locator #Laravel Facades #Laravel Testable Code #Laravel Scalable Architecture #Laravel Best Practices #Laravel 12
Share:
M

Written by

Mahmut Sarıkaya

Software Developer

Comments

No comments yet. Be the first to share your thoughts!

Leave a Comment

2 + 4 =