Laravel API Resources
·
3 min read
API resource trong Laravel cung cấp cách chuyển đổi model thành JSON response. Chúng giúp bạn tạo API nhất quán và dễ bảo trì.
Tạo API Resource
Tạo class resource sử dụng Artisan:
php artisan make:resource UserResource
Định nghĩa logic chuyển đổi trong method toArray:
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
];
}
Sử Dụng API Resource
Trả về resource từ controller để chuyển đổi một model:
return new UserResource($user);
Collection
Sử dụng ResourceCollection để chuyển đổi nhiều model:
return UserResource::collection($users);
Thuộc Tính Có Điều Kiện
Bao gồm thuộc tính có điều kiện dựa trên điều kiện nhất định:
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->when($request->user()->isAdmin(), $this->email),
];
}
Relationship
Chuyển đổi model liên quan sử dụng resource lồng nhau:
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name,
'posts' => PostResource::collection($this->whenLoaded('posts')),
];
}
Phân Trang
Laravel API resource hoạt động mượt mà với dữ liệu phân trang:
return UserResource::collection($users->paginate(10));
Metadata phân trang tự động được bao gồm trong response.
Best Practice
- Giữ Resource Đơn Giản: Tránh thêm logic phức tạp vào resource.
- Sử Dụng Resource Lồng Nhau: Chuyển đổi relationship sử dụng class resource riêng.
- Tận Dụng Thuộc Tính Có Điều Kiện: Chỉ bao gồm thuộc tính khi cần thiết.
- Phân Trang Tập Dữ Liệu Lớn: Luôn phân trang collection để cải thiện hiệu năng.
- Tuân Theo Chuẩn JSON:API: Cấu trúc response theo chuẩn API phổ biến.
Trường Hợp Sử Dụng Thực Tế
- Hồ Sơ Người Dùng: Chuyển đổi dữ liệu user với bài viết hoặc bình luận liên quan.
- API Thương Mại Điện Tử: Định dạng dữ liệu sản phẩm với danh mục và đánh giá.
- Dashboard Phân Tích: Tổng hợp và chuyển đổi dữ liệu cho frontend.
API resource giúp dễ dàng tạo JSON response nhất quán, dễ bảo trì và có thể mở rộng. Hãy bắt đầu sử dụng chúng để nâng cao API Laravel của bạn ngay hôm nay!