Yii2: phát triển web service API 2

Ở bài trước chúng ta đã tìm hiểu các khái niệm về web service api, bài này chúng ta sẽ đi vào làm một ví dụ thực tế cách chúng ta triển khai viết một ứng dụng web service API đơn giản.

1 – Yêu cầu:

  • Appache2
  • PHP 7.0 trở lên với extension PDO được bật
  • Đã cài đặt Composer
  • Cơ sở dữ liệu: Mysql
  • Postman

2 – Khởi tạo ứng dụng

Để bắt đầu 1 dự án với Yii2 chúng ta có thể sử dụng composer để cài đặt ứng dụng hoặc có thể download source từ trang chủ của Yii: https://www.yiiframework.com/download

Ở đây mình sẽ dụng composer để tạo ứng dụng, chúng ta sẽ tạo 1 ứng dụng có tên là: restful-api-tutorial

composer create-project --prefer-dist yiisoft/yii2-app-basic restful-api-tutorial

Kết quả sau khi chạy xong:

Để kiểm tra ứng dụng đã được cài đăt thành công chúng ta sẽ di chuyển đến thư mục của dự án và dùng lệnh sau:

cd restful-api-tutorial
php yii serve

hoặc có thể vào trực tiếp bằng url của localhost: http://localhost/restful-api-tutorial/web/

Như vậy là chúng ta đã khởi tạo xong ứng dụng với tên là restful-api-tutorial.

3 – Kết nối cơ sở dữ liệu

Chúng ta sẽ tạo cơ sở dữ liệu tên là restful_api, tiếp theo chúng ta sẽ kết nối ứng dụng với cơ sở dữ liệu.

Mở dự án trên công cụ viết code như netbean IDE, visual studio code,…

Chúng ta mở file config/db.php và sửa lại như sau:

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=restful_api',
    'username' => 'root', // username của mysql trên máy local của bạn
    'password' => 'root', // password của mysql
    'charset' => 'utf8',

];

4 – Tạo các bảng cơ sở dữ liệu

Để đơn giản chúng ta sẽ xây dựng ứng dụng tạo thành viên và quản lý thông tin cá nhân với những bảng cơ sở dữ liệu sau:

  • bảng members: sẽ lưu thông tin đăng nhập của user như: user_id, username, password, trạng thái, thời gian đăng nhập, …
  • bảng profile: bao gồm các thông tin first name, last name, email, ngày tháng năm sinh,….

Bây giờ chúng ta sẽ tiến hành tạo các bảng bằng mirgration, các bạn có thể tham khảo về migration tại đây

php yii migrate/create create_members_table
php yii migrate/create create_profile_table

file migrate được tạo trong thư mục migrations của dự án với định dạng m<YYMMDD_HHMMSS>_<tên chúng ta nhập ở lệnh trên >.php

Sau khi migration được tạo chúng ta sẽ edit như sau:

// m220406_085602_create_members_table

use yii\db\Migration;

/**
 * Handles the creation of table `{{%members}}`.
 */
class m220406_085602_create_members_table extends Migration
{
    /**
     * {@inheritdoc}
     */
    public function safeUp()
    {
        $this->createTable('{{%members}}', [
            'id' => $this->primaryKey(),
            'username' => $this->string(250)->notNull(),
            'password' => $this->string(250)->notNull(),
            'status' => $this->tinyInteger(2)->defaultValue(0),
            'last_login' => $this->dateTime()->null(),
            'created_at' => $this->dateTime()->null(),
            'updated_at' => $this->dateTime()->null(),
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function safeDown()
    {
        $this->dropTable('{{%members}}');
    }
}
// m220406_085857_create_profile_table

use yii\db\Migration;

/**
 * Handles the creation of table `{{%members}}`.
 */
class m220406_085602_create_members_table extends Migration
{
    /**
     * {@inheritdoc}
     */
    public function safeUp()
    {
        $this->createTable('{{%members}}', [
            'id' => $this->primaryKey(),
            'username' => $this->string(250)->notNull(),
            'password' => $this->string(250)->notNull(),
            'status' => $this->tinyInteger(2)->defaultValue(0),
            'last_login' => $this->dateTime()->null(),
            'created_at' => $this->dateTime()->null(),
            'updated_at' => $this->dateTime()->null(),
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function safeDown()
    {
        $this->dropTable('{{%members}}');
    }
}

Ở trên chúng ta edit xong migration cho 2 bảng members và profile,

Tiếp theo chúng ta sẽ chạy migration để tạo bảng trong cơ sở dữ liệu của chúng ta với câu lệnh dưới đây:

php yii migrate

Kết quả:

Kiểm tra lại trong phpMyadmin chúng ta cũng sẽ thấy 2 bảng được tạo.

Như vậy ở bài này chúng ta đã khởi tạo được ứng dụng, kết nối cơ sở dữ liệu và tạo các bảng cơ sở dữ liệu.

Ở bài sau chúng ta sẽ đi vào chi tiết việc viết code cho các API cho ứng dụng này.