LARAVEL TUTORIALS
10 thủ thuật Lavavel giúp bạn code nhanh hơn! Routing trong Laravel, cách tạo Route và sử dung AZ Tạo Middleware trong Laravel đơn giản trong 5 phút Xử lý Authentication và Authorization trong Laravel Event và listener trong Laravel, cách tạo và quản lý cơ bản nhất Tạo broadcast event trong Laravel dễ dàng trong 10 phút Xử lý Form Validation trong Laravel từ A - Z Cách tạo Session và cookie trong Laravel dễ dàng như ăn cháo Top 10 Package Lavavel thường dùng trong dự án Laravel Sử dụng Task trong Laravel đơn giản trong 10 phút. Cách tạo API trong Laravel đơn giản chỉ trong 5 phút Cách tạo job trong Laravel sao cho hiệu quả? Queues trong Laravel, dùng để xử lý các tác vụ mất nhiều thời gian Cache trong Laravel, các loại Cache thường dùng trong Laravel Redis trong Laravel, biết cách sử dung Redis Laravel trong 5 phút Sử dụng Memcache trong Laravel tăng tốc độ truy cập website Unit Test trong Laravel, thực hành tạo testing Laravel A-Z 10 thủ thuật tối ưu quá trình Testing trong Laravel Top 7 thư viện Testing Laravel được dùng nhiều nhất Testbench và Orchestra Testbench trong Laravel, kiểm thử Laravel dễ dàng Cách dùng Browser Testing (Laravel Dusk) trong Laravel Cách tạo test case cho Controller trong Laravel Cách tạo test case cho Model trong Laravel Cách tạo Database Testing trong Laravel Real-time web applications là gì ? Tầm quan trọng trong Laravel Laravel WebSockets, các bước tạo WebSockets trong Laravel Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime Cách dùng Long polling trong Laravel để cải thiện trải nghiệm Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ Cách dùng Event Sourcing trong Laravel Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản Sử dụng Service Container trong Laravel dễ dàng Cách xử lý đa ngôn ngữ trong Laravel dễ dàng Tìm hiểu và sử dụng Service Provider trong Laravel Facades là gì? Cách dùng Facades trong Laravel Cách sử dụng Email Verification trong Laravel Cách dùng URL Generation trong Larevel Cách sử dụng Error Handling trong Laravel Cách dùng Encryption và decryption trong Laravel Cách sử dụng Relationships trong Laravel Bài 01: Laravel là gì? Hướng dẫn cài đặt laravel trên windows Sử dụng Event trong Laravel Một cách quản lý filter trong Laravel
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Cách tạo API trong Laravel đơn giản chỉ trong 5 phút

API (Application Programming Interface) là một khái niệm quan trọng trong lập trình ứng dụng hiện nay. Và nếu bạn đang tìm kiếm cách học về API trong Laravel, thì bạn đã đến đúng nơi rồi!

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong bài viết này, chúng ta sẽ tìm hiểu về cách sử dụng API trong Laravel chỉ trong vòng 5 phút, với những ví dụ cực đơn giản, giúp bạn nhanh chóng bắt đầu với việc phát triển API trong Laravel.

API trong Laravel là gì?

API trong Laravel là một tập hợp các route và phương thức xử lý được định nghĩa trong Laravel để cung cấp các dịch vụ và tương tác với ứng dụng web của bạn.

API (viết tắt của Application Programming Interface) cho phép các ứng dụng khác nhau có thể tương tác và giao tiếp với nhau thông qua một giao diện chung. Trong Laravel, các API có thể được sử dụng để truy xuất và cập nhật dữ liệu từ cơ sở dữ liệu của ứng dụng, hoặc để cung cấp dữ liệu cho các ứng dụng khác.

Bài viết này được đăng tại [free tuts .net]

Laravel hỗ trợ nhiều loại API, bao gồm các loại phổ biến như RESTful API, JSON API, XML API, GraphQL, và nhiều loại khác nữa. Laravel cung cấp các tính năng và công cụ hỗ trợ để dễ dàng xây dựng các API đơn giản và hiệu quả.

Từ việc định nghĩa các route, tạo các phương thức xử lý cho các yêu cầu API, đến việc kiểm thử và triển khai API, Laravel cung cấp một cách tiếp cận dễ dàng và linh hoạt để phát triển các dịch vụ API trong ứng dụng Laravel của bạn.

Cơ chế phát triển của API

Định tuyến API (Routing)

Định tuyến API trong Laravel giúp xác định cách tương tác với các tài nguyên thông qua các phương thức HTTP như GET, POST, PUT, DELETE... Để định tuyến API trong Laravel, chúng ta có thể sử dụng Router. Các bước để định tuyến API trong Laravel như sau:

1. Mở file routes/api.php: File này được sử dụng để định tuyến các yêu cầu API của ứng dụng.

2. Sử dụng phương thức Route để định tuyến các yêu cầu API. Ví dụ:

Route::get('/users', 'UserController@index');
Route::post('/users', 'UserController@store');
Route::put('/users/{id}', 'UserController@update');
Route::delete('/users/{id}', 'UserController@destroy');

Trong ví dụ trên, chúng ta định tuyến các yêu cầu API để lấy danh sách người dùng, tạo mới người dùng, cập nhật người dùng và xóa người dùng.

3. Thiết lập các phương thức điều khiển (Controller) để xử lý các yêu cầu API được định tuyến. Ví dụ:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all();

        return response()->json($users);
    }

    public function store(Request $request)
    {
        $user = User::create($request->all());

        return response()->json($user);
    }

    public function update(Request $request, $id)
    {
        $user = User::find($id);
        $user->update($request->all());

        return response()->json($user);
    }

    public function destroy($id)
    {
        $user = User::find($id);
        $user->delete();

        return response()->json('User deleted');
    }
}

Trong ví dụ trên, chúng ta sử dụng các phương thức điều khiển để xử lý các yêu cầu API được định tuyến. Ví dụ, phương thức index() trả về tất cả người dùng dưới dạng JSON,

4. Kiểm tra API bằng cách sử dụng các công cụ kiểm thử API, chẳng hạn như Postman hoặc Insomnia.

Như vậy, đó là cách để định tuyến API trong Laravel. Chúng ta có thể sử dụng các phương thức HTTP khác nhau để định tuyến các yêu cầu API và sử dụng các phương thức điều khiển để xử lý các yêu cầu API được định tuyến.

Xác thực và phân quyền (Authentication and Authorization)

Trong Laravel, xác thực và phân quyền là hai khái niệm quan trọng trong phát triển ứng dụng web và API. Xác thực là quá trình xác định danh tính của người dùng, trong khi phân quyền là quá trình xác định quyền hạn của người dùng. Laravel cung cấp các công cụ mạnh mẽ để thực hiện xác thực và phân quyền dễ dàng.

1. Xác thực trong Laravel:

Để xác thực người dùng trong Laravel, chúng ta có thể sử dụng middleware tích hợp sẵn trong framework, như middleware "auth". Middleware "auth" sẽ kiểm tra xem người dùng đã đăng nhập hay chưa. Nếu chưa đăng nhập, người dùng sẽ được chuyển hướng đến trang đăng nhập. Để sử dụng middleware "auth", chúng ta có thể sử dụng phương thức "middleware" trong tệp định tuyến (routes/web.php hoặc routes/api.php), ví dụ:

Route::get('/profile', function () {
    // Chỉ những người dùng đã đăng nhập mới có thể truy cập vào trang này
})->middleware('auth');

2. Phân quyền trong Laravel:

Để phân quyền người dùng trong Laravel, chúng ta có thể sử dụng middleware "can". Middleware "can" sẽ kiểm tra xem người dùng có quyền truy cập vào tài nguyên hay không. Để sử dụng middleware "can", chúng ta cần xác định các chính sách (policy) để định nghĩa các quyền hạn của người dùng đối với tài nguyên, và đăng ký chính sách với middleware "can". Ví dụ:

// Đăng ký chính sách với middleware "can"
Gate::policy(Post::class, PostPolicy::class);

// Sử dụng middleware "can" trong tệp định tuyến (routes/web.php hoặc routes/api.php)
Route::get('/posts/{post}', function (Post $post) {
    // Chỉ những người dùng có quyền truy cập vào bài viết mới có thể xem nội dung bài viết này
})->middleware('can:view,post');

Trong ví dụ trên, chúng ta đăng ký chính sách "PostPolicy" cho model "Post", và sử dụng middleware "can" để kiểm tra xem người dùng có quyền truy cập vào bài viết hay không. Chính sách "PostPolicy" có thể định nghĩa các phương thức để xác định các quyền hạn của người dùng đối với tài nguyên "Post", ví dụ:

class PostPolicy
{
    public function view(User $user, Post $post)
    {
        return $user->id

Trong phương thức "view" của chính sách "PostPolicy", chúng ta xác định rằng người dùng chỉ có quyền xem bài viết nếu người dùng là tác giả của bài viết hoặc là quản trị viên.

Ngoài ra, Laravel còn cung cấp các công cụ khác để thực hiện phân quyền như ACL (Access Control List) và RBAC (Role-Based Access Control). Để sử dụng ACL hoặc RBAC trong Laravel, chúng ta có thể sử dụng các package như Laravel Permission hay Laravel Spatie.

Trả về JSON (Returning JSON)

Để trả về dữ liệu dưới định dạng JSON, chúng ta có thể sử dụng phương thức "json" trên đối tượng Response. Đối tượng Response được trả về từ một phương thức hoặc một hàm trong Laravel, và có thể được trả về dưới nhiều định dạng khác nhau, bao gồm HTML, JSON, XML, v.v.

Ví dụ, để trả về một mảng dữ liệu dưới định dạng JSON, chúng ta có thể sử dụng phương thức "json" như sau:

use Illuminate\Http\Response;

Route::get('/api/users', function () {
    $users = [        ['name' => 'John', 'email' => 'john@example.com'],
        ['name' => 'Jane', 'email' => 'jane@example.com'],
    ];

    return response()->json($users);
});

Trong ví dụ trên, chúng ta định nghĩa một tuyến đường (route) "/api/users" để lấy danh sách người dùng. Trong phương thức xử lý tuyến đường, chúng ta tạo một mảng dữ liệu $users, sau đó sử dụng phương thức "json" trên đối tượng Response để trả về mảng dữ liệu này dưới định dạng JSON.

Chúng ta có thể truyền thêm các tham số cho phương thức "json" để cấu hình các tùy chọn như mã trạng thái HTTP, các tiêu đề (headers), v.v. Ví dụ:

return response()->json($users, 200, [], JSON_PRETTY_PRINT);

Trong ví dụ trên, chúng ta truyền thêm mã trạng thái HTTP là 200 (OK), một mảng rỗng để không có tiêu đề nào được thêm vào đối tượng Response, và tùy chọn JSON_PRETTY_PRINT để định dạng dữ liệu JSON theo kiểu đẹp.

Truy vấn CSDL (Database Querying)

Để lấy dữ liệu đầu vào từ một yêu cầu API, chúng ta có thể sử dụng đối tượng Request. Đối tượng Request chứa thông tin về yêu cầu HTTP và cho phép chúng ta truy cập các thông tin như tham số đường dẫn (URL), tham số truy vấn (query parameters), tham số phân đoạn (URL segments), phần thân yêu cầu (request body), v.v.

Ví dụ, để lấy tham số truy vấn "page" từ một yêu cầu GET, chúng ta có thể sử dụng đoạn mã sau:

use Illuminate\Http\Request;

Route::get('/api/posts', function (Request $request) {
    $page = $request->input('page');

    // xử lý dữ liệu và trả về kết quả
});

Trong ví dụ trên, chúng ta định nghĩa một tuyến đường "/api/posts" để lấy danh sách các bài viết. Trong phương thức xử lý tuyến đường, chúng ta khai báo đối tượng Request làm tham số và sử dụng phương thức "input" để lấy giá trị của tham số truy vấn "page".

Chúng ta có thể sử dụng các phương thức khác trên đối tượng Request để lấy các loại thông tin khác nhau từ yêu cầu, ví dụ như "path" để lấy đường dẫn URL, "segment" để lấy tham số phân đoạn, "header" để lấy các tiêu đề (headers), v.v.

Nếu yêu cầu có phần thân (request body) là dữ liệu đầu vào, chúng ta có thể sử dụng phương thức "json" trên đối tượng Request để lấy dữ liệu đó dưới dạng mảng hoặc đối tượng JSON. Ví dụ:

$data = $request->json()->all();

Trong ví dụ trên, chúng ta sử dụng phương thức "json" để lấy dữ liệu đầu vào dưới dạng JSON, sau đó sử dụng phương thức "all" để chuyển đổi dữ liệu này thành một mảng PHP.

Kiểm thử API (Testing)

Chúng ta có thể kiểm thử các API một cách dễ dàng bằng cách sử dụng tính năng kiểm thử tích hợp (integration testing). Tính năng này cho phép chúng ta xác định các yêu cầu và phản hồi HTTP, giúp chúng ta kiểm tra tính đúng đắn của API mà không cần phải sử dụng một công cụ kiểm thử bên ngoài.

Để bắt đầu kiểm thử API trong Laravel, chúng ta có thể sử dụng lớp "TestCase" để viết các bài kiểm thử (test case). Ví dụ, để kiểm thử yêu cầu GET đến API "/api/posts", chúng ta có thể sử dụng đoạn mã sau:

use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class PostApiTest extends TestCase
{
    use RefreshDatabase;

    public function testGetPosts()
    {
        $response = $this->get('/api/posts');

        $response->assertStatus(200);
        $response->assertJsonStructure([
            'data' => [
                '*' => [
                    'id',
                    'title',
                    'content',
                    'created_at',
                    'updated_at',
                ]
            ]
        ]);
    }
}

Trong ví dụ trên, chúng ta định nghĩa một lớp kiểm thử "PostApiTest" kế thừa từ lớp "TestCase". Trong phương thức "testGetPosts", chúng ta sử dụng phương thức "get" để gửi yêu cầu GET đến API "/api/posts", sau đó sử dụng các phương thức "assert" để kiểm tra kết quả trả về.

Phương thức "assertStatus" kiểm tra mã trạng thái HTTP của phản hồi, trong trường hợp này là 200. Phương thức "assertJsonStructure" kiểm tra cấu trúc JSON của phản hồi, trong trường hợp này là mảng chứa các bài viết với các thuộc tính "id", "title", "content", "created_at""updated_at".

Chúng ta có thể viết các bài kiểm thử khác để kiểm tra các yêu cầu và phản hồi khác nhau của API, ví dụ như kiểm tra yêu cầu POST để tạo mới một bài viết, kiểm tra yêu cầu PUT hoặc PATCH để cập nhật một bài viết, kiểm tra yêu cầu DELETE để xóa một bài viết, v.v.

Kết bài viết

Trên đây là những kiến thức cơ bản về API trong Laravel mà bạn có thể học được trong vòng 5 phút. Tuy nhiên, đừng để thời gian ngắn này khiến bạn nghĩ rằng việc học về API trong Laravel là đơn giản và không đáng giá. Thực tế, việc hiểu rõ cách hoạt động của API sẽ giúp bạn xây dựng những ứng dụng web phức tạp hơn và tối ưu hóa được hiệu suất của chúng.

Nếu bạn muốn học sâu hơn về API trong Laravel, hãy tham khảo thêm các tài liệu và khóa học trực tuyến. Hãy bắt đầu với những kiến thức cơ bản và từ từ tiến đến những nội dung phức tạp hơn. Chúc bạn may mắn và thành công trong hành trình học tập của mình!

Một số câu hỏi liên quan về API trong Laravel

1. API là gì?

API (Application Programming Interface) là một giao diện giúp các ứng dụng và hệ thống khác tương tác với nhau. API đóng vai trò quan trọng trong việc kết nối các ứng dụng, chia sẻ dữ liệu và tạo ra những sản phẩm mới.

2. Laravel cung cấp API như thế nào?

Laravel cung cấp một loạt các công cụ để xây dựng API như Laravel API Resource, Laravel Sanctum, Laravel Passport và nhiều thư viện khác. Nhờ vào các công cụ này, việc xây dựng API trở nên dễ dàng và nhanh chóng hơn.

3. Tại sao nên sử dụng API trong Laravel?

Sử dụng API trong Laravel giúp bạn tạo ra những ứng dụng web đa nền tảng, tối ưu hóa hiệu suất và cung cấp cho người dùng một trải nghiệm tốt hơn. Bên cạnh đó, API cũng giúp bạn kết nối với các dịch vụ khác, chia sẻ dữ liệu và tăng cường tính tương tác giữa các ứng dụng.

4. Có bao nhiêu loại API trong Laravel?

Trong Laravel, có nhiều loại API như RESTful API, GraphQL API và SOAP API. RESTful API là loại phổ biến nhất và được sử dụng rộng rãi trong các ứng dụng web hiện đại.

5. Làm thế nào để kiểm thử API trong Laravel?

Laravel cung cấp nhiều công cụ để kiểm thử API như PHPUnit và Laravel Dusk. Bạn cũng có thể sử dụng Postman để kiểm thử API trong Laravel.

Cùng chuyên mục:

Cách sử dụng Relationships trong Laravel

Cách sử dụng Relationships trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách dùng Encryption và decryption trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách sử dụng Error Handling trong Laravel

Cách dùng URL Generation trong Larevel

Cách dùng URL Generation trong Larevel

Cách sử dụng Email Verification trong Laravel

Cách sử dụng Email Verification trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Facades là gì? Cách dùng Facades trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Tìm hiểu và sử dụng Service Provider trong Laravel

Sử dụng Service Container trong Laravel dễ dàng

Sử dụng Service Container trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách xử lý đa ngôn ngữ trong Laravel dễ dàng

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách sử dụng CQRS trong Laravel từ A đến Z đơn giản

Cách dùng Event Sourcing trong Laravel

Cách dùng Event Sourcing trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Task Scheduling là gì? Cấu hình Task Scheduling trong Laravel

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách dùng Queue trong laravel để tạo tác vụ bất đồng bộ

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách tích hợp Vue.js vào Laravel và làm một ứng dụng căn bản

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Cách dùng Long polling trong Laravel để cải thiện trải nghiệm

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Dùng Server-Sent Events trong Laravel để làm ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Cách dùng Socket.io trong Laravel để tạo ứng dụng realtime

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Laravel WebSockets, các bước tạo WebSockets trong Laravel

Real-time web applications là gì ? Tầm quan trọng  trong Laravel

Real-time web applications là gì ? Tầm quan trọng trong Laravel

Cách tạo Database Testing trong Laravel

Cách tạo Database Testing trong Laravel

Top