API geliştirirken verilerinizi nasıl yönetiyorsunuz? Laravel API Resources ile profesyonel veri dönüşümü yapmanın inceliklerini keşfedelim!
API Resources, Laravel'de veri dönüşüm katmanı olarak çalışır:
php artisan make:resource UserResource php artisan make:resource UserCollection
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);
'email' => $this->when($request->user()->isAdmin(), $this->email)
return [ 'posts' => PostResource::collection($this->whenLoaded('posts')) ];
$this->mergeWhen($request->user()->isAdmin(), [ 'last_login_ip' => $this->last_login_ip, 'login_count' => $this->login_count ]);
Ö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));
'created_at' => $this->created_at->isoFormat('LLLL')
'avatar' => $this->avatar ? Storage::url($this->avatar) : null
'is_active' => $this->deleted_at === null
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) ] ]; } }
Laravel API Resources ile:
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 🚀