一、項(xiàng)目初始化

1. 數(shù)據(jù)庫(kù)準(zhǔn)備

為了存儲(chǔ)博客文章和分類信息,我們需要先配置數(shù)據(jù)庫(kù)。以下是 SQL 結(jié)構(gòu):

-- posts表結(jié)構(gòu)
CREATE TABLE posts (
    id INT PRIMARY KEY AUTO_INCREMENT,
    category_id INT,
    title VARCHAR(255),
    body TEXT,
    author VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- categories表結(jié)構(gòu)
CREATE TABLE categories (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

按照以下步驟進(jìn)行數(shù)據(jù)庫(kù)設(shè)置:

  1. 啟動(dòng) XAMPP 中的 MySQL 服務(wù)。
  2. phpMyAdmin 中創(chuàng)建一個(gè)名為 my_blog 的數(shù)據(jù)庫(kù)。
  3. 導(dǎo)入以上的 SQL 文件(可以通過(guò)項(xiàng)目的 GitHub 倉(cāng)庫(kù)下載)。

2. 項(xiàng)目文件結(jié)構(gòu)

接下來(lái),創(chuàng)建以下文件夾和文件結(jié)構(gòu):

php_rest_myblog/
├── config/
│ └── Database.php
├── models/
│ └── Post.php
├── api/
│ └── posts/
│ └── read.php

二、數(shù)據(jù)庫(kù)連接類

1. 創(chuàng)建 Database

config/Database.php 中,創(chuàng)建用于連接數(shù)據(jù)庫(kù)的 Database 類:

< ?php
class Database {
    private $host = "localhost";
    private $dbname = "my_blog";
    private $username = "root";
    private $password = "";
    private $conn;

    public function connect() {
        $this- > conn = null;

        try {
            $this- > conn = new PDO(
                "mysql:host=" . $this- > host . ";dbname=" . $this- > dbname,
                $this- > username,
                $this- > password
            );
            $this- > conn- > setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo "Connection Error: " . $e- > getMessage();
        }

        return $this- > conn;
    }
}
? > 

三、模型類開(kāi)發(fā)

1. 創(chuàng)建 Post 模型類


models/Post.php 中,創(chuàng)建處理文章數(shù)據(jù)的 Post 模型類:

< ?php
class Post {
    private $conn;
    private $table = "posts";

    public $id;
    public $category_id;
    public $title;
    public $body;
    public $author;
    public $created_at;

    public function __construct($db) {
        $this- > conn = $db;
    }

    public function read() {
        $query = "SELECT c.name AS category_name, p.id, p.category_id, p.title, p.body, p.author, p.created_at
                  FROM " . $this- > table . " p
                  LEFT JOIN categories c ON p.category_id = c.id
                  ORDER BY p.created_at DESC";

        $stmt = $this- > conn- > prepare($query);
        $stmt- > execute();

        return $stmt;
    }
}
? > 

四、API端點(diǎn)開(kāi)發(fā)

1. 創(chuàng)建文章讀取端點(diǎn)

api/posts/read.php 中,創(chuàng)建 REST API 端點(diǎn)來(lái)讀取文章數(shù)據(jù):

< ?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');

include_once '../../config/Database.php';
include_once '../../models/Post.php';

$database = new Database();
$db = $database- > connect();

$post = new Post($db);
$result = $post- > read();
$num = $result- > rowCount();

if ($num  >  0) {
    $posts_arr = array();
    $posts_arr['data'] = array();

    while ($row = $result- > fetch(PDO::FETCH_ASSOC)) {
        extract($row);

        $post_item = array(
            'id' = >  $id,
            'title' = >  $title,
            'body' = >  html_entity_decode($body),
            'author' = >  $author,
            'category_id' = >  $category_id,
            'category_name' = >  $category_name
        );

        array_push($posts_arr['data'], $post_item);
    }

    echo json_encode($posts_arr);
} else {
    echo json_encode(array('message' = >  'No Posts Found'));
}
? > 

五、API 測(cè)試


通過(guò) Postman 測(cè)試 API:

  1. 打開(kāi) Postman
  2. 創(chuàng)建 GET 請(qǐng)求。
  3. 輸入 URL:http://localhost/php_rest_myblog/api/posts/read.php
  4. 點(diǎn)擊 Send 按鈕。

如果配置無(wú)誤,你將看到返回的 JSON 數(shù)據(jù),包含所有文章及其分類信息。


總結(jié)

通過(guò)本文,你已經(jīng)學(xué)會(huì)如何使用 純PHP 創(chuàng)建 RESTful API。這種從零開(kāi)始的方式雖然更為繁瑣,但能幫助你深入理解 Web 開(kāi)發(fā)的核心概念。希望你能從中獲得啟發(fā),打造更復(fù)雜的項(xiàng)目!

原文引自YouTube視頻:https://www.youtube.com/watch?v=OEWXbpUMODk

上一篇:

Flask、FastAPI 與 Django 框架比較:Python Web 應(yīng)用開(kāi)發(fā)教程

下一篇:

通過(guò) SEO rank API 獲取百度關(guān)鍵詞排名
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)