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 🏆
- Transformasyon mantığını controller'dan ayırın
- İlişkileri lazy loading ile yükleyin
- Sensitive datayı filtreleyin
- Meta bilgileri standartlaştırın
- 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 🚀
+(43).png&w=320&q=50)


