× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

REST API trong PHP - Xây dựng một REST API đơn giản trong PHP

29/07/2021 01:36

RE presentational S tate T ransfer (REST) là một kiến trúc phần mềm phong cách định nghĩa một tập các ràng buộc được sử dụng để tạo Web Services. REST API trong PHP là một trong những trụ cột của sự phát triển web hiện đại. Hầu hết các ứng dụng web ngày nay được phát triển dưới dạng các ứng dụng một trang trên giao diện người dùng, được kết nối với các API phụ trợ được viết bằng các ngôn ngữ khác nhau. Có nhiều framework PHP khác nhau có thể giúp bạn xây dựng REST API trong vài phút. Tuy nhiên, chúng ta hãy tìm hiểu cách xây dựng một REST API đơn giản trong lõi PHP (PHP core) qua bài viết dưới đây.

Điều kiện tiên quyết để tạo REST API trong PHP

  • PHP
  • MySQL
  • Composer
  • Postman

Bộ khung của REST API trong PHP

Tạo một thư mục /src và một tệp composer.json trong thư trên cùng với một phần phụ thuộc: thư viện DotEnv, cho phép lưu trữ thông tin trong tệp .env.

composer.json

{

  "require": {

    "vlucas/phpdotenv": "^2.4"

  },

  "autoload": {

    "psr-4": {

      "Src\\": "src/"

    }

  }

}

Trình tải tự động PSR-4 sẽ tự động tìm kiếm các lớp PHP trong thư mục /src.

Đây là lúc cài đặt các phụ thuộc:

composer install

Nó sẽ tạo một thư mục  /vendor và phần phụ thuộc DotEnv sẽ được cài đặt (autoloader sẽ tải các lớp từ /src mà không cần hàm gọi include()).

Tạo tệp .gitignore  cho dự án của bạn với hai dòng trong đó, vì vậy thư mục /vendor và tệp cục bộ .env sẽ bị bỏ qua:

.gitignore

vendor/

.env

Tiếp theo, tạo một tệp .env.example cho các biến Secret (Bí mật):

.env.example

DB_HOST=localhost

DB_PORT=3306

DB_DATABASE=

DB_USERNAME=

DB_PASSWORD=

Và một tệp  .env nơi bạn sẽ điền thông tin chi tiết thực của mình sau này (nó sẽ bị Git bỏ qua nên sẽ không kết thúc trong kho lưu trữ của bạn).

Tạo một tệp tải start.php các biến môi trường.

start.php

<?php

require 'vendor/autoload.php';

use Dotenv\Dotenv;

use Src\Database;

$dotenv = new DotEnv(__DIR__);

$dotenv->load();

// test code:

// it will output: localhost

// when you run $ php start.php

echo getenv('DB_HOST');

>>> Đọc thêm: Date time trong PHP - Cách xử lý date time trong PHP nhanh nhất

Định hình Cơ sở dữ liệu cho REST API trong PHP 

Chúng ta sẽ sử dụng MySQL để cấp nguồn cho API đơn giản của chúng tôi.

Tạo cơ sở dữ liệu và người dùng mới cho ứng dụng của bạn:

mysql -u root -p

CREATE DATABASE blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'rest_api_user'@'localhost' identified by 'rest_api_password';

GRANT ALL on blog.* to 'rest_api_user'@'localhost';

quit

REST API sẽ chứa bài viết cho chúng ta trong ứng dụng Blog, với các lĩnh vực sau: id, title, body, author, author_picture, created_at. Nó cho phép người dùng đăng blog của họ trên ứng dụng Blog của chúng ta.

Tạo bảng cơ sở dữ liệu trong MySQL.

mysql -u rest_api_user -p;

// Enter your password

use blog;




CREATE TABLE `post` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `title` varchar(255) NOT NULL,

  `body` text NOT NULL,

  `author` varchar(255),

  `author_picture` varchar(255),

  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

  PRIMARY KEY (`id`)

);

Thêm các biến kết nối cơ sở dữ liệu vào tệp .env của bạn :

.env

DB_HOST=localhost

DB_PORT=3306

DB_DATABASE=blog

DB_USERNAME=rest_api_user

DB_PASSWORD=rest_api_password

Tạo một lớp để giữ database và thêm phần khởi tạo kết nối vào tệ start.php

src/Database.php

class Database {




  private $dbConnection = null;




  public function __construct()

  {

    $host = getenv('DB_HOST');

    $port = getenv('DB_PORT');

    $db   = getenv('DB_DATABASE');

    $user = getenv('DB_USERNAME');

    $pass = getenv('DB_PASSWORD');




    try {

      $this->dbConnection = new \PDO(

          "mysql:host=$host;port=$port;dbname=$db",

          $user,

          $pass

      );

    } catch (\PDOException $e) {

      exit($e->getMessage());

    }

  }




  public function connet()

  {

    return $this->dbConnection;

  }

}

start.php

<?php

require 'vendor/autoload.php';

use Dotenv\Dotenv;
use Src\Database;

$dotenv = new DotEnv(__DIR__);

$dotenv->load();

$dbConnection = (new Database())->connet();

>>> Đọc thêm: Hằng số trong PHP - Tìm hiểu nhanh về hằng số trong PHP

Thêm lớp cho Post Table và triển khai REST API trong PHP

Có nhiều cách để tương tác với cơ sở dữ liệu trong ngữ cảnh hướng đối tượng, nhưng chúng ta sẽ tìm hiểu một phương pháp đơn giản nhất, nơi bạn sẽ triển khai các phương thức để trả về tất cả các bài đăng, trả về một bài đăng cụ thể và thêm / cập nhật / xóa bài đăng.

Ngoài ra, các điểm cuối API sẽ được xử lý bởi giao diện người dùng của chúng ta tại api/index.php.

REST API với các điểm cuối như sau:

 

API

CRUD

Mô tả

GET /posts

READ

Nhận tất cả các bài viết từ bảng post

GET /post/{id}

READ

Nhận một bài đăng từ bảng post

POST /post

CREATE

Tạo bài đăng và chèn vào bảng Post

PUT /post/{id}

UPDATE

Cập nhât bài đăng trong bảng post

DELETE /post/{id}

DELATE

xóa bài đăng khỏi bảng post

api/index.php

<?php

require "../start.php";

use Src\Post;




header("Access-Control-Allow-Origin: *");

header("Content-Type: application/json; charset=UTF-8");

header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE");

header("Access-Control-Max-Age: 3600");

header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");




$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

$uri = explode( '/', $uri );




// all of our endpoints start with /post or /posts

// everything else results in a 404 Not Found

if ($uri[1] !== 'post') {




    if($uri[1] !== 'posts'){

        header("HTTP/1.1 404 Not Found");

        exit();

    }




}




if ($uri[1] == 'posts' and isset($uri[2])) {

    header("HTTP/1.1 404 Not Found");

    exit();

}




// the post id is, of course, optional and must be a number:

$postId = null;

if (isset($uri[2])) {

    $postId = (int) $uri[2];

}




$requestMethod = $_SERVER["REQUEST_METHOD"];




// pass the request method and post ID to the Post and process the HTTP request:

$controller = new Post($dbConnection, $requestMethod, $postId);

$controller->processRequest();

Kiểm tra các điểm cuối API bằng Postman 

>>> Tham khảo: Khóa học lập trình PHP

Kết luận: Bài viết trên đã giới thiệu tới bạn cách xây dựng một REST API trong PHP. Sau khi xây dựng xong ứng dụng này, đừng quên bảo mật API bằng cách xác thực và ủy quyền bạn nhé. Tìm hiểu thêm về PHP và các ngôn ngữ lập trình khác qua các khóa học lập trình tại Viện công nghệ thông tin T3H.ngay hôm nay để nhận ưu đãi nhé!