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é!