Mục Lục
Mục Lục
Hướng dẫn cài đặt môi trường [Bài Viết] Hướng dẫn cài composer [Bài Viết] Hướng dẫn tạo dự án Laravel đầu tay. [Bài Viết] Hướng dẫn cấu hình cơ sở dữ liệu và bật chức năng auth có sẵn trong Laravel [Bài Viết] Hướng dẫn cài theme Acacha AdminLTE cho Laravel [Bài Viết] Hướng dẫn tắt debug khi upload dự án laravel lên HOST Video Hướng dẫn cài đặt môi trường + tạo dự án + Tìm hiểu Route qua ví dụ - Lập trình Laravel Video Hướng dẫn cài đặt dự án Laravel + Cài đặt chức năng Auth (login + register) trong Laravel Tìm hiểu Route & View & Controller Video Tìm hiểu Route trong Laravel + Học lập trình laravel qua ví dụ Hello World, ax+b=0, Hiển thị danh sách sinh viên Video Tìm hiểu Route qua ví dụ quản lý sinh viên - Laravel Video Hướng dẫn tìm hiểu Route - Controller - View trong Laravel qua ví dụ Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Hello World trong Laravel Phần 1 Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Tính giai thừa trong Laravel Phần 2 Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ hiển thị danh sách sinh viên trong Laravel Phần 3 Tìm hiểu route + truyền dữ liệu từ controller tới view qua bài quản lý khách sạn- Lập trình Laravel Tìm hiểu route + truyền dữ liệu từ controller tới view qua bài quản lý sản phẩm - Lập trình Laravel Tìm hiểu Route - Controller - View trong Laravel Route: Giải phương trình bậc 2 (ax2 + bx + c = 0) bằng Laravel - Lập trình laravel BÀI TẬP LARAVEL CƠ BẢN - Lập Trình Laravel - Route → Controller → View QUẢN LÝ SINH VIÊN (KHÔNG DÙNG DATABASE) - Khóa học lập trình Laravel GET/POST trong Laravel Video Tìm hiểu GET/POST trong Laravel qua ví dụ nhập thông tin người dùng - Lập trình Laravel Quản lý sinh viên bằng Laravel - Lập trình Laravel Video Quản lý sinh viên bằng Laravel - Lập trình Laravel Layout - Blade Video Tìm hiểu Route - Blade (nhung css/js/photos) - cú pháp Blade - Xử lý GET/POST trong Laravel Video Hướng dẫn tìm hiểu layout trong Laravel - qua ví dụ tạo website tin tức - Lập Trình Laravel Bài Tập Học Layout thông qua clone website - Creative Theme Bootstrap Free - Lập trình Laravel Kết nối CSDL - Laravel Video Hướng dẫn tìm hiểu view, migration, seeder, db - laravel - Qua ví dụ quản lý sinh viên Video Học Laravel qua ví dụ thêm & hiển thị tài khoản người dung - DB::Insert - DB::get - Paginate - Khoá Học Laravel Tìm hiểu migration trong laravel - Lập trình laravel Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel Video - Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel Video Bài tập quản lý sách bằng Laravel - Full Source Code quản lý sách - Lập trình Laravel Ôn tập - Chương trình quản lý sách + danh mục sách - Lập trình PHP, Laravel Website thi trắc nghiệm lập trình Aptech - Lập trình laravel - Lập trình PHP Tạo 1 POS bán hàng cho siêu thị - Supper Market - Lập trình Laravel Video - Tạo 1 POS bán hàng cho siêu thị - Supper Market - Lập trình Laravel Video Hướng dẫn tim hiểu Pagination + model qua ví dụ quản lý sinh viên - Lập trình Laravel Tìm hiểu paginate trong laravel - Quản lý sản phẩm - Lập trình Laravel Ứng dụng Quản lý Sách trong Laravel Phân quyền - Chức năng nâng cao Video - Tìm hiểu Auth trong Laravel Video Phân Quyền-Hướng dẫn viết chức năng phân quyền người dùng theo role Lâp Trình PHP/Laravel Video API Resful Laravel - Hướng dẫn tạo API Resful bằng PHP/Laravel - Khóa học lập trình PHP/Laravel [Examination] Examination & Test + Website tra cứu luật giao thông đường bộ - Lập trình PHP - Lập trình Laravel [Examination] Bài tập ôn luyện kết thúc môn - Sử dụng Laravel + Ajax Thực Chiến: Web bán hàng Video Hướng dẫn tạo dự án super market - phần 1 - Laravel Video Hướng dẫn tạo dự án super market - phần 2- laravel Video Tạo giở hàng - học lập trình laravel qua project- Phần 3 - laravel Khóa Học Lập Trình Laravel Thực Chiến Video Source Code Dự Án - Thực Chiến Web Bán Hàng Video Phần 1 | Laravel | Web bán hàng - Giới thiệu công nghệ Video Phần 2 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL Video Phần 3 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL Video Phần 4 | Laravel | Thiết kế web bán hàng - Cài đặt dự án & Authetication & Migration CSDL Video Phần 5 | Laravel | Thực Chiến - Web Bán Hàng -Tích hợp template và chỉnh sửa trang đăng ký-đăng nhập Video Phần 6 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Role trong dự án Video Phần 7 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng quản lý người dung trong dự án Video Phần 8 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng quản lý danh mục Video Phần 9 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý sản phẩm Video Phần 10 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý tin tức Video Phần 11 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý phản hồi Video Phần 12 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý đơn hàng Video Phần 13 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng bảo mật trong dự án Video Phần 14 | Laravel | Thực Chiến - Web Bán Hàng - Trang Chủ & Phân Layout Video Phần 15 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Sản Phẩm Video Phần 16 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Tin Tức Video Phần 17 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Liên Hệ Unlisted Video Phần 18 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Chi Tiết Tin Tức Video Phần 19 | Laravel | Thực Chiến - Web Bán Hàng - FE Chi Tiết Sản Phẩm Video Phần 20 | Laravel | Thực Chiến - Web Bán Hàng - Trang giỏ hàng Video Phần 21 | Laravel | Thực Chiến - Web Bán Hàng - Trang thanh toán & hoàn thành thanh toán Video Phần 22 | Laravel | Final | Hướng dẫn cài đặt dự án từ source code mẫu
Laravel Tutorial

[Video] API Resful Laravel - Hướng dẫn tạo API Resful bằng PHP/Laravel - Khóa học lập trình PHP/Laravel

Mở bài

Trong thời đại chuyển đổi số, các hệ thống phần mềm không còn hoạt động độc lập mà cần liên kết và giao tiếp với nhau qua API. Đặc biệt, các ứng dụng web, mobile, và hệ thống doanh nghiệp đều dựa vào RESTful API để trao đổi dữ liệu nhanh chóng, bảo mật và linh hoạt.

Với Laravel – framework PHP mạnh mẽ và phổ biến nhất hiện nay, việc xây dựng API RESTful không chỉ đơn giản mà còn cực kỳ tối ưu. Laravel cung cấp sẵn các công cụ mạnh mẽ như Eloquent ORM, Route Resource, API Resource, và Middleware, giúp lập trình viên dễ dàng xây dựng hệ thống API chuyên nghiệp chỉ trong vài bước.

Bài viết này sẽ hướng dẫn bạn từng bước xây dựng RESTful API hoàn chỉnh trong Laravel, từ thiết kế database, viết controller, định nghĩa route, cho đến cách bảo mật bằng Laravel Sanctum.
Đây là bài viết nằm trong chuỗi Khóa học lập trình PHP/Laravel thực chiến, giúp bạn làm chủ Laravel qua các ví dụ thực tế và ứng dụng doanh nghiệp.

RESTful API là gì?

Trước khi bắt tay vào code, hãy cùng ôn lại khái niệm cơ bản.

REST (Representational State Transfer) là một kiến trúc giúp các hệ thống giao tiếp với nhau qua HTTP. Một API RESTful tuân thủ các nguyên tắc sau:

  1. Sử dụng các phương thức HTTP tiêu chuẩn:

    • GET → Lấy dữ liệu

    • POST → Thêm mới dữ liệu

    • PUT/PATCH → Cập nhật dữ liệu

    • DELETE → Xóa dữ liệu

  2. Dữ liệu trả về ở định dạng JSON – phổ biến và dễ sử dụng với mọi nền tảng.

  3. Stateless (phi trạng thái): Mỗi request độc lập, không lưu session.

  4. Sử dụng URL rõ ràng, mô tả tài nguyên:
    Ví dụ:

    • /api/books → Danh sách sách

    • /api/books/5 → Chi tiết sách có id = 5

Nhờ tuân thủ nguyên tắc này, RESTful API trở thành nền tảng cho hầu hết các ứng dụng hiện đại như Facebook, Google, Zalo, hoặc Shopee.

Bước 1: Thiết kế Database cho API

Giả sử chúng ta xây dựng API quản lý thư viện gồm 2 bảng chính: bookscategories.

Tạo migration

php artisan make:migration create_categories_table --create=categories php artisan make:migration create_books_table --create=books

Trong file migration:

// categories Schema::create('categories', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); // books Schema::create('books', function (Blueprint $table) { $table->id(); $table->string('title'); $table->string('author'); $table->decimal('price', 8, 2); $table->foreignId('category_id')->constrained('categories')->onDelete('cascade'); $table->timestamps(); });

Chạy lệnh:

php artisan migrate

Bây giờ bạn đã có cơ sở dữ liệu sẵn sàng cho API.

Bước 2: Tạo Model và Controller

Tạo model BookCategory:

php artisan make:model Book -m php artisan make:model Category -m

Tạo controller kiểu RESTful:

php artisan make:controller Api/BookController --api php artisan make:controller Api/CategoryController --api

Bước 3: Định nghĩa Route cho API

Laravel hỗ trợ định nghĩa route API cực kỳ ngắn gọn bằng Route::apiResource.

Trong file routes/api.php:

use App\Http\Controllers\Api\BookController; use App\Http\Controllers\Api\CategoryController; Route::apiResource('categories', CategoryController::class); Route::apiResource('books', BookController::class);

Các route tự động sinh ra:

HTTP MethodURLAction
GET/api/booksindex
GET/api/books/{id}show
POST/api/booksstore
PUT/PATCH/api/books/{id}update
DELETE/api/books/{id}destroy

Bước 4: Viết Controller cho RESTful API

Ví dụ: BookController

namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\Book; use Illuminate\Http\Request; class BookController extends Controller { public function index() { return response()->json(Book::with('category')->paginate(10)); } public function store(Request $request) { $request->validate([ 'title' => 'required', 'author' => 'required', 'price' => 'required|numeric', 'category_id' => 'required|exists:categories,id', ]); $book = Book::create($request->all()); return response()->json($book, 201); } public function show($id) { $book = Book::with('category')->findOrFail($id); return response()->json($book); } public function update(Request $request, $id) { $book = Book::findOrFail($id); $book->update($request->all()); return response()->json($book); } public function destroy($id) { Book::destroy($id); return response()->json(['message' => 'Book deleted successfully']); } }

Giờ bạn đã có API CRUD hoàn chỉnh cho Book.

Bước 5: Test API bằng Postman

Bạn có thể kiểm tra API bằng công cụ Postman hoặc Insomnia:

  • GET /api/books → Lấy danh sách sách

  • POST /api/books → Gửi JSON:

    { "title": "Laravel for Beginners", "author": "John Doe", "price": 120.5, "category_id": 1 }
  • PUT /api/books/1 → Cập nhật sách

  • DELETE /api/books/1 → Xóa sách

Tất cả kết quả trả về đều ở JSON format, chuẩn RESTful.

Bước 6: Chuẩn hóa dữ liệu với API Resource

Laravel hỗ trợ API Resource giúp bạn định dạng dữ liệu trả về một cách chuyên nghiệp.

Tạo resource:

php artisan make:resource BookResource

Trong file BookResource.php:

public function toArray($request) { return [ 'id' => $this->id, 'title' => $this->title, 'author' => $this->author, 'price' => number_format($this->price, 2), 'category' => $this->category->name ?? null, 'created_at' => $this->created_at->toDateTimeString(), ]; }

Trong BookController:

use App\Http\Resources\BookResource; public function index() { return BookResource::collection(Book::with('category')->paginate(10)); } public function show($id) { return new BookResource(Book::with('category')->findOrFail($id)); }

Kết quả trả về sẽ gọn gàng, dễ hiểu và nhất quán giữa các API.

Bước 7: Bảo mật API với Laravel Sanctum

Để bảo vệ API, ta có thể dùng Laravel Sanctum – giải pháp xác thực token nhẹ gọn.

Cài đặt:

composer require laravel/sanctum php artisan migrate

Thêm middleware vào app/Http/Kernel.php:

'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],

Trong model User:

use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; }

Tạo route login:

Route::post('/login', [AuthController::class, 'login']);

Và trong AuthController:

public function login(Request $request) { $credentials = $request->only('email', 'password'); if (!Auth::attempt($credentials)) { return response()->json(['message' => 'Unauthorized'], 401); } $user = Auth::user(); $token = $user->createToken('API Token')->plainTextToken; return response()->json(['token' => $token]); }

Bây giờ mọi request đến API có thể kèm theo token trong header:

Authorization: Bearer <token>

Bước 8: Cấu trúc URL RESTful chuyên nghiệp

Một số gợi ý để bạn thiết kế API chuyên nghiệp hơn:

Tác vụEndpointPhương thức
Danh sách sách/api/booksGET
Chi tiết sách/api/books/{id}GET
Thêm mới/api/booksPOST
Cập nhật/api/books/{id}PUT
Xóa/api/books/{id}DELETE
Lọc theo danh mục/api/books?category=1GET

Bước 9: Tối ưu hiệu năng và phân trang

Laravel hỗ trợ sẵn paginate() giúp giảm tải cho API khi có hàng ngàn dữ liệu:

return BookResource::collection(Book::paginate(10));

Kết quả trả về:

{ "data": [...], "links": {...}, "meta": {...} }

Giúp bạn dễ dàng tạo chức năng load more hoặc infinite scroll trên frontend.

Bước 10: Viết Unit Test cho API

Bạn có thể kiểm tra API tự động bằng PHPUnit:

php artisan make:test BookApiTest
public function test_book_index_returns_success() { $response = $this->get('/api/books'); $response->assertStatus(200); }

Điều này giúp đảm bảo API luôn hoạt động đúng ngay cả khi cập nhật hệ thống.

Kết luận

Việc xây dựng RESTful API bằng Laravel không chỉ đơn giản mà còn cực kỳ mạnh mẽ. Chỉ trong vài bước, bạn đã có một hệ thống API hoàn chỉnh, có phân trang, có bảo mật, có định dạng dữ liệu chuyên nghiệp.

Từ những ví dụ trên, bạn có thể dễ dàng mở rộng ra các dự án thực tế như:

  • API quản lý người dùng

  • API bán hàng

  • API học trực tuyến

  • API siêu thị điện tử

Laravel thực sự là framework PHP mạnh nhất cho phát triển RESTful API, bởi sự linh hoạt, cú pháp ngắn gọn và hệ sinh thái đồ sộ.

🚀 Nếu bạn muốn làm chủ kỹ năng này, hãy tham gia Khóa học lập trình PHP/Laravel tại qviet.vn – nơi bạn được học qua các dự án thực tế, từ xây dựng website đến API chuyên nghiệp.

Hãy bắt đầu hôm nay – chỉ với vài dòng lệnh, bạn có thể tạo ra một hệ thống RESTful API đẳng cấp doanh nghiệp!



Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó

×