
使用NestJS和Prisma構建REST 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
使用NestJS和Prisma構建REST API:身份驗證
如何使用 DeepSeek 構建 AI Agent:終極指南
模型壓縮四劍客:量化、剪枝、蒸餾、二值化
Yahoo Finance API – 完整指南
WordPress REST API 內容注入漏洞分析
Transformers Generate 功能介紹
四款AI大模型API價格對比:DeepSeek R1、ChatGPT o3-mini、Grok3、通義千問 Max
四款AI大模型API基礎參數、核心性能的區別:DeepSeek R1、ChatGPT o3-mini、Grok3、通義千問 Max
2025年多模態大模型API基礎參數、核心性能:Deepseek、ChatGPT、文心一言