API Resource và xây dựng REST API
Laravel hỗ trợ xây dựng RESTful API một cách dễ dàng và rõ ràng thông qua hệ thống API Resource. Việc sử dụng API Resource giúp định dạng đầu ra thống nhất, dễ kiểm soát dữ liệu trả về và bảo vệ các trường nhạy cảm. Bài học này sẽ hướng dẫn cách tạo và sử dụng Resource
để trả về dữ liệu JSON chuẩn.

1 Tạo API Resource
Laravel cung cấp lệnh để tạo một lớp Resource
:
php artisan make:resource PostResource
Tệp sẽ được tạo tại: app/Http/Resources/PostResource.php
.
2 Định nghĩa định dạng JSON trong Resource
Mở file PostResource.php
và định nghĩa các trường muốn trả về:
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class PostResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'title' => $this->title,
'slug' => $this->slug,
'excerpt' => $this->excerpt,
'created_at' => $this->created_at->toDateTimeString(),
];
}
}
Lưu ý: Không nên trả về toàn bộ
$this->resource
nếu có trường nhạy cảm nhưuser_id
,content
,updated_at
,...
3 Trả về dữ liệu bằng Resource
Trong controller (ví dụ: Api\PostController
), bạn có thể trả về dữ liệu bằng Resource:
use App\Http\Resources\PostResource;
public function show(Post $post)
{
return new PostResource($post);
}
4 Trả về danh sách nhiều bài viết
Dùng collection()
để bao gói nhiều đối tượng:
public function index()
{
$posts = Post::latest()->paginate(10);
return PostResource::collection($posts);
}
5 Đăng ký route API
Trong routes/api.php
:
use App\Http\Controllers\Api\PostController;
Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{post}', [PostController::class, 'show']);
Ví dụ cụ thể
Request:
GET /api/posts
Response:
{
"data": [
{
"title": "Giới thiệu Laravel",
"slug": "gioi-thieu-laravel",
"excerpt": "Laravel là một framework PHP mạnh mẽ...",
"created_at": "2025-05-25 10:22:35"
},
...
],
"links": { ... },
"meta": { ... }
}
Bài tập thực hành
- Tạo route
GET /api/posts
trả về danh sách bài viết. - Tạo
PostResource
chỉ trả về các trường:title
,slug
,excerpt
,created_at
. - Thêm
GET /api/posts/{id}
để trả về chi tiết một bài viết theo định dạng JSON. - Đảm bảo các trường nhạy cảm (như
content
,user_id
,...) không hiển thị.
Kết luận
API Resource trong Laravel giúp bạn dễ dàng kiểm soát cấu trúc và nội dung phản hồi JSON, đảm bảo bảo mật và thống nhất dữ liệu đầu ra. Khi xây dựng API chuyên nghiệp, đây là công cụ không thể thiếu để đảm bảo chuẩn RESTful và dễ tích hợp với frontend hoặc mobile app.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com