所有文章 > API开发 > 使用PHP构建简单的REST API
使用PHP构建简单的REST API

使用PHP构建简单的REST API

REST API 是现代 Web 开发的核心技术之一。目前,大多数 Web 应用程序通常以单页应用程序(SPA)的形式开发,并通过后端 API 提供支持。这些 API 可以用多种编程语言实现。在 PHP 生态系统中,Laravel/Lumen 和 Symfony 的 API 平台是构建 REST API 的常用框架。这些框架提供了丰富的工具来处理请求、生成正确的 HTTP 状态代码响应,以及解决身份验证、请求验证、数据转换、分页等常见问题。

然而,对于简单的 API,我们并不总是需要复杂的框架支持。在本文中,我们将从零开始,使用 PHP 构建一个简单但安全的 REST API,并通过 Okta 作为授权提供商实现客户端凭据流,确保 API 的安全性。


创建 REST API 的 PHP 项目骨架

首先,我们需要为项目创建基本的文件结构。在项目根目录下创建一个 /src 目录,并添加一个简单的 composer.json 文件。我们将使用 DotEnv 库来管理环境变量,例如 Okta 的身份验证信息。

配置自动加载器

composer.json 文件中配置 PSR-4 自动加载器,以便自动加载 /src 目录中的 PHP 类。完成后,运行以下命令安装依赖项:

composer install

安装完成后,项目中会生成一个 /vendor 目录,并安装 DotEnv 依赖项。接下来,为项目创建一个 .gitignore 文件,确保 /vendor 目录和 .env 文件不会被提交到代码仓库。

配置环境变量

创建一个 .env.example 文件,用于存储 Okta 身份验证所需的变量模板。同时,创建一个 .env 文件,用于存储实际的 Okta 凭据信息。为了加载这些环境变量,我们需要创建一个 bootstrap.php 文件:

require_once __DIR__ . '/../vendor/autoload.php';

$dotenv = DotenvDotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();

配置数据库

我们将使用 MySQL 作为 API 的数据库。首先,为应用程序创建一个新的数据库和用户。接着,创建一个名为 Person 的表,用于存储用户信息。表结构如下:

  • id
  • firstname
  • lastname
  • firstparent_id
  • secondparent_id

以下是创建表的 SQL 语句:

CREATE TABLE Person (
 id INT AUTO_INCREMENT PRIMARY KEY,
 firstname VARCHAR(255) NOT NULL,
 lastname VARCHAR(255) NOT NULL,
 firstparent_id INT DEFAULT NULL,
 secondparent_id INT DEFAULT NULL
);

将数据库连接信息添加到 .env.example 文件中,并在 .env 文件中填写实际的数据库凭据。

数据库连接类

创建一个 PHP 类用于管理数据库连接,并在 bootstrap.php 文件中初始化连接:

class Database {
 private $connection;

 public function __construct() {
 $this->connection = new PDO(
 'mysql:host=' . $_ENV['DB_HOST'] . ';dbname=' . $_ENV['DB_NAME'],
 $_ENV['DB_USER'],
 $_ENV['DB_PASSWORD']
 );
 }

 public function getConnection() {
 return $this->connection;
 }
}

为 Person 表添加网关类

在面向对象编程中,有多种方式与数据库交互。对于简单的 API,我们可以使用表网关模式。创建一个 PersonGateway 类,包含以下方法:

  • 获取所有记录
  • 获取特定记录
  • 添加新记录
  • 更新记录
  • 删除记录

以下是 PersonGateway 类的示例代码:

class PersonGateway {
 private $db;

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

 public function getAll() {
 $stmt = $this->db->query("SELECT * FROM Person");
 return $stmt->fetchAll(PDO::FETCH_ASSOC);
 }

 public function getById($id) {
 $stmt = $this->db->prepare("SELECT * FROM Person WHERE id = :id");
 $stmt->execute(['id' => $id]);
 return $stmt->fetch(PDO::FETCH_ASSOC);
 }

 public function create($data) {
 $stmt = $this->db->prepare("INSERT INTO Person (firstname, lastname) VALUES (:firstname, :lastname)");
 $stmt->execute($data);
 }

 public function update($id, $data) {
 $stmt = $this->db->prepare("UPDATE Person SET firstname = :firstname, lastname = :lastname WHERE id = :id");
 $stmt->execute(array_merge($data, ['id' => $id]));
 }

 public function delete($id) {
 $stmt = $this->db->prepare("DELETE FROM Person WHERE id = :id");
 $stmt->execute(['id' => $id]);
 }
}

实现 PHP REST API

我们将创建以下 REST API 端点

  • GET /persons:获取所有用户
  • GET /persons/{id}:获取特定用户
  • POST /persons:创建新用户
  • PUT /persons/{id}:更新用户
  • DELETE /persons/{id}:删除用户

在项目的 /public 目录下创建一个 index.php 文件作为前端控制器,并在 src/controller 目录下创建 PersonController.php 来处理具体的 API 请求。


使用 OAuth 2.0 保护 API

为了保护 API,我们将使用 Okta 作为授权服务器,并实现客户端凭据流。以下是身份验证的基本流程:

  1. 客户端应用程序持有客户端 ID 和密钥。
  2. 客户端将凭据传递给 Okta,获取访问令牌。
  3. 客户端使用访问令牌向 API 服务器发送请求。
  4. API 服务器验证令牌的有效性,并根据结果提供资源或返回 401 错误。

配置 Okta

使用 Okta CLI 创建 OAuth 2.0 服务应用程序,并将生成的凭据添加到 .env 文件中。确保在 Okta 管理控制台中为 API 添加所需的作用域。


构建测试客户端应用程序

为了测试 API,我们将创建一个简单的命令行客户端应用程序。该客户端将从 .env 文件中读取 Okta 的详细信息,获取访问令牌,并调用 API 端点。

以下是测试客户端的示例代码:

$token = getAccessToken();
$response = callApi('/persons', $token);

function getAccessToken() {
 // 使用 Okta 凭据获取访问令牌
}

function callApi($endpoint, $token) {
 // 使用 cURL 调用 API
}

运行客户端脚本即可测试 API 的功能。


总结

通过本文的步骤,我们从零开始构建了一个简单的 PHP REST API,并使用 Okta 实现了安全性。完整的代码可以在 GitHub 示例仓库 中找到。如果您想深入了解相关技术,可以参考以下资源:

原文链接: https://developer.okta.com/blog/2019/03/08/simple-rest-api-php
#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费