
Yahoo Finance API – 完整指南
REST API 是现代 Web 开发的核心技术之一。目前,大多数 Web 应用程序通常以单页应用程序(SPA)的形式开发,并通过后端 API 提供支持。这些 API 可以用多种编程语言实现。在 PHP 生态系统中,Laravel/Lumen 和 Symfony 的 API 平台是构建 REST API 的常用框架。这些框架提供了丰富的工具来处理请求、生成正确的 HTTP 状态代码响应,以及解决身份验证、请求验证、数据转换、分页等常见问题。
然而,对于简单的 API,我们并不总是需要复杂的框架支持。在本文中,我们将从零开始,使用 PHP 构建一个简单但安全的 REST API,并通过 Okta 作为授权提供商实现客户端凭据流,确保 API 的安全性。
首先,我们需要为项目创建基本的文件结构。在项目根目录下创建一个 /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;
}
}
在面向对象编程中,有多种方式与数据库交互。对于简单的 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]);
}
}
我们将创建以下 REST API 端点:
GET /persons
:获取所有用户GET /persons/{id}
:获取特定用户POST /persons
:创建新用户PUT /persons/{id}
:更新用户DELETE /persons/{id}
:删除用户在项目的 /public
目录下创建一个 index.php
文件作为前端控制器,并在 src/controller
目录下创建 PersonController.php
来处理具体的 API 请求。
为了保护 API,我们将使用 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
Yahoo Finance API – 完整指南
WordPress REST API 内容注入漏洞分析
四款AI大模型API价格对比:DeepSeek R1、ChatGPT o3-mini、Grok3、通义千问 Max
四款AI大模型API基础参数、核心性能的区别:DeepSeek R1、ChatGPT o3-mini、Grok3、通义千问 Max
2025年多模态大模型API基础参数、核心性能:Deepseek、ChatGPT、文心一言
2025年最新推理大模型API价格对比:通义千问Max vs 豆包1.5 Pro vs 混元Lite
大模型新基座,基于FastAPI,利用Python开发MCP服务器
DeepSeek+ima:打造高效个人知识库,提升学习与工作效率
快速接入腾讯地图MCP Server