接下來,系統(tǒng)會要求您輸入一些基本信息,包括名稱、標(biāo)簽和描述,這些信息會出現(xiàn)在屏幕截圖的下方區(qū)域。其中,標(biāo)簽和描述主要用于管理界面中的參考和識別,而名稱則具有特別的重要性,因?yàn)樗鼘⒆鳛?API URL 的一部分,稍后您就會看到這一點(diǎn)。

定義 MySQL API 命名空間

最后,請點(diǎn)擊“Config”選項(xiàng)卡。在這個頁面上,您需要填寫數(shù)據(jù)庫的連接憑據(jù)(請參考下面的屏幕截圖)。這些信息對于您來說可能并不陌生;您需要提供數(shù)據(jù)庫的主機(jī)名、用戶名、密碼以及要連接的數(shù)據(jù)庫名稱。

此外,系統(tǒng)還允許您選擇性地指定其他配置選項(xiàng),例如驅(qū)動程序參數(shù)、時區(qū)設(shè)置以及緩存偏好等。不過,在本教程中,我將僅關(guān)注必填字段,并保留所有可選功能為默認(rèn)設(shè)置。

插入 MySQL API 憑據(jù)

獲取到所需的數(shù)據(jù)庫連接憑據(jù)后,您只需點(diǎn)擊屏幕底部的“Save”按鈕,令人難以置信的是,REST API 就已經(jīng)被成功創(chuàng)建了!

2. 查看 Swagger 文檔

在創(chuàng)建 API 的同時,DreamFactory 還會為您的 API 自動生成一套全面的交互式 Swagger 文檔。要訪問這些文檔,您只需點(diǎn)擊管理界面頂部的“API Docs”選項(xiàng)卡,然后按照名稱選擇您剛剛創(chuàng)建的新服務(wù)。一旦進(jìn)入,您將發(fā)現(xiàn)多達(dá)44個終端節(jié)點(diǎn)可供使用,這些節(jié)點(diǎn)支持執(zhí)行存儲過程、進(jìn)行CRUD(創(chuàng)建、讀取、更新、刪除)操作、查詢視圖等多種功能。值得注意的是,以下屏幕截圖僅僅展示了新生成的 MySQL REST API 端點(diǎn)中的一小部分!

REST API 端點(diǎn)

3. 創(chuàng)建角色和 API 密鑰

DreamFactory 所生成的所有 API 都至少會受到 API 密鑰的自動保護(hù)。在身份驗(yàn)證方面,您可以選擇使用基本身份驗(yàn)證、單點(diǎn)登錄(SSO)或目錄服務(wù)(如 LDAP 和 Active Directory)。此外,您還可以將每個 API 密鑰和/或用戶與一個特定的“角色”相關(guān)聯(lián),這個角色將精確決定用戶能夠訪問哪些服務(wù)。更進(jìn)一步,您還可以將交互限制在特定的數(shù)據(jù)庫表或表集合、特定的端點(diǎn),甚至是對允許的 HTTP 方法進(jìn)行限制。

在 API 的開發(fā)和集成過程中,保護(hù)那些代表 API 與 MySQL 數(shù)據(jù)庫進(jìn)行交互的用戶是至關(guān)重要的。

現(xiàn)在,讓我們以一個實(shí)例來說明如何創(chuàng)建一個新角色,這個角色將關(guān)聯(lián)的 API 密鑰限制為在新創(chuàng)建的 MySQL API 中以只讀方式與單個表進(jìn)行交互。為此,請按照以下步驟操作:首先導(dǎo)航到“Roles”選項(xiàng)卡,并點(diǎn)擊“Create”按鈕。接下來,您將看到類似下面屏幕截圖中的界面。在截圖中,我已經(jīng)為這個角色指定了一個名稱和描述,并通過勾選“Active”(活動)復(fù)選框來激活它

然后,請點(diǎn)擊“Access”選項(xiàng)卡。在這里,您可以定義角色能夠執(zhí)行的操作。在下面的屏幕截圖中,您可以看到我已經(jīng)將角色的權(quán)限限制為只能與 MySQL 服務(wù)交互,并且在該服務(wù)中,角色僅能通過 GET 方法與“_table/employees*”終端節(jié)點(diǎn)進(jìn)行交互。一切已鎖定,確保安全!

屏幕截圖 2024-06-18 在 3.39.37 下午

單擊“Save”按鈕以保存所創(chuàng)建的角色。接下來,我們的任務(wù)是創(chuàng)建一個新的 API 密鑰,并將這個密鑰與我們剛剛創(chuàng)建的角色進(jìn)行關(guān)聯(lián)。為了完成這一步,請按照以下操作進(jìn)行:首先,點(diǎn)擊位于 API 類型下拉列表下方的“API 密鑰”選項(xiàng)卡;其次,在 API 密鑰列表中選擇一個(如果是首次創(chuàng)建,則直接操作即可);然后,點(diǎn)擊“+”按鈕以新增一個 API 密鑰。在新增 API 密鑰的界面中,為您的應(yīng)用程序分配一個具有描述性的名稱和詳細(xì)的描述,確保將其狀態(tài)設(shè)置為“Active”。然后,在角色分配部分,選擇我們之前為 MySQL 設(shè)置的默認(rèn)角色,就像我在下面的屏幕截圖中展示的那樣。

關(guān)于應(yīng)用程序位置設(shè)置,如果您打算通過 Web 應(yīng)用、移動應(yīng)用或其他 Web 服務(wù)來與 API 進(jìn)行交互,那么您應(yīng)該選擇“無需存儲”這一選項(xiàng)。這意味著 API 密鑰將不會與特定的設(shè)備或位置進(jìn)行綁定,從而提供了更大的靈活性。

API 密鑰 API 應(yīng)用程序

點(diǎn)擊“Save”按鈕后,您將會被帶回到 Apps 的索引頁面。在這個頁面上,您將能夠看到剛剛創(chuàng)建的新 API 密鑰。為了方便日后使用,建議您將這個密鑰復(fù)制到文本文件中保存起來!

4. 為您的 MySQL API 配置 CORS

在能夠從 DreamFactory 管理界面外部成功測試 API 之前,我們還需要完成一個關(guān)鍵的配置步驟,那就是為新 API 啟用 CORS(跨域資源共享)。為了操作方便,您可以選擇使用默認(rèn)的 CORS 設(shè)置,就像我在下面的屏幕截圖中所展示的那樣。這樣的設(shè)置將允許來自所有網(wǎng)絡(luò)地址的 API 請求通過,從而方便您進(jìn)行測試和集成工作。

API 密鑰

5. 測試 MySQL REST API

完成 API 的生成、API 密鑰的創(chuàng)建與角色的關(guān)聯(lián),以及 CORS 的配置之后,您就可以著手通過客戶端與 API 進(jìn)行交互了!我個人在 MacOS 系統(tǒng)上傾向于使用 Insomnia 來進(jìn)行 HTTP 測試,當(dāng)然,Postman 也是另一個廣受歡迎的選擇。

在以下的屏幕截圖中,我展示了如何使用 Insomnia 發(fā)起一個 GET 請求,以訪問 /api/v2/_table/employees 這個終端節(jié)點(diǎn)。

值得注意的是,我們已經(jīng)為此 API 密鑰設(shè)置了權(quán)限限制,即僅允許使用 GET 方法與 /api/v2/_table/employees/* 端點(diǎn)進(jìn)行交互。因此,如果我們嘗試通過 POST 方法向該表發(fā)送數(shù)據(jù),將會收到一個 401(未授權(quán))狀態(tài)碼的響應(yīng),正如以下屏幕截圖所展示的那樣。

創(chuàng)建 MySQL API 的其他途徑

顯然,DreamFactory 并非創(chuàng)建 MySQL REST API 的唯一選擇。盡管手動編碼的方式耗時更長且難度更大,但它仍然是構(gòu)建此類 API 的另一種可行方法。然而,在手動開發(fā) API 的過程中,開發(fā)者還需關(guān)注 API 的安全性等其他問題。以下是一些關(guān)于如何著手手動編寫 API 的簡要建議。

1.安裝并配置 Web 服務(wù)器、PHP 及 MySQL

構(gòu)建 MySQL REST API 的首要步驟是搭建一個 Web 服務(wù)器環(huán)境。您可以選擇 Apache 或 Nginx 等 Web 服務(wù)器來處理客戶端的 HTTP 請求,并返回相應(yīng)的內(nèi)容作為響應(yīng)。同時,您還需要在服務(wù)器上安裝 PHP,這是一種流行的服務(wù)器端腳本語言,能夠與 MySQL 數(shù)據(jù)庫進(jìn)行交互,以實(shí)現(xiàn)數(shù)據(jù)的檢索或存儲。此外,MySQL 作為關(guān)系型數(shù)據(jù)庫管理系統(tǒng),能夠在表中存儲和管理數(shù)據(jù)。當(dāng)這些組件全部安裝并配置完畢后,您就可以開始著手構(gòu)建 REST API 了。

2.  設(shè)計(jì)并構(gòu)建 MySQL 數(shù)據(jù)庫與表,以存儲通過 API 公開的數(shù)據(jù)

數(shù)據(jù)庫是數(shù)據(jù)的集合,這些數(shù)據(jù)以結(jié)構(gòu)化的方式(如包含列和行的表)進(jìn)行組織。MySQL 作為一種流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng),允許用戶創(chuàng)建并管理這些數(shù)據(jù)庫和表。

在 MySQL 中新建數(shù)據(jù)庫,您可以選擇使用 MySQL 命令行界面執(zhí)行 CREATE DATABASE 命令,或者借助 phpMyAdmin 等工具來完成。

3.  編寫 PHP 腳本以連接數(shù)據(jù)庫并執(zhí)行 SQL 查詢

為了從 PHP 連接到 MySQL 數(shù)據(jù)庫,您需要使用 MySQLi、PDO 等擴(kuò)展。一旦連接建立,您就可以執(zhí)行 SQL 查詢,從數(shù)據(jù)庫中提取所需數(shù)據(jù)。這些 SQL 查詢需要精心設(shè)計(jì),以確保能夠檢索到計(jì)劃通過 API 公開的數(shù)據(jù),并且必須采用參數(shù)化查詢,從而有效防范 SQL 注入攻擊。

數(shù)據(jù)從數(shù)據(jù)庫檢索出來后,您可以利用 PHP 的內(nèi)置函數(shù),將其轉(zhuǎn)換成 JSON 格式。JSON 是一種輕量級的數(shù)據(jù)交換格式,易于解析,且廣泛兼容多種編程語言。

4. 使用 PHP 數(shù)據(jù)對象 (PDO) 擴(kuò)展以安全的方式準(zhǔn)備和執(zhí)行 SQL 語句,并獲取結(jié)果。

PDO 是一個功能強(qiáng)大且靈活的 PHP 擴(kuò)展,它提供了訪問各種數(shù)據(jù)庫的統(tǒng)一接口。PDO 支持多種數(shù)據(jù)庫驅(qū)動程序(例如 MySQL),并具備預(yù)編譯語句和參數(shù)綁定等特性,這些都有助于防范 SQL 注入攻擊。

若要使用 PDO 連接 MySQL 數(shù)據(jù)庫,您需要創(chuàng)建一個 PDO 對象,并傳入數(shù)據(jù)庫的連接信息。隨后,您可以調(diào)用 prepare() 方法來準(zhǔn)備 SQL 語句,使用 bindParam() 或 bindValue() 方法來綁定參數(shù)(如果適用),最后通過 execute() 方法執(zhí)行該語句。執(zhí)行完成后,您可以利用 fetch()fetchAll() 或 fetchColumn() 等方法檢索查詢結(jié)果。

5. 將數(shù)據(jù)轉(zhuǎn)換為 JSON 格式,并通過適當(dāng)?shù)?HTTP 頭輸出到客戶端

json_encode() 是 PHP 的一個內(nèi)置函數(shù),它能夠?qū)?shù)據(jù)轉(zhuǎn)換為 JSON 格式的字符串。您可以向該函數(shù)傳遞任何數(shù)據(jù)類型(例如數(shù)組或?qū)ο螅鼘⒈晦D(zhuǎn)換成 JSON 字符串,這種格式非常便于客戶端應(yīng)用程序進(jìn)行解析和使用。

在獲得 JSON 字符串后,您需要通過設(shè)置適當(dāng)?shù)?HTTP 頭來將其輸出到客戶端。在 PHP 中,這可以通過 header() 函數(shù)來實(shí)現(xiàn),該函數(shù)允許您指定內(nèi)容類型和其他有關(guān)響應(yīng)的元數(shù)據(jù)。例如,為了輸出 JSON 數(shù)據(jù),您應(yīng)該將 Content-Type 頭設(shè)置為 "application/json"

通過將數(shù)據(jù)以 JSON 格式輸出,并設(shè)置正確的 HTTP 頭,您可以確保客戶端應(yīng)用程序能夠輕松地使用 REST API,并遵循標(biāo)準(zhǔn)的 Web 通信規(guī)范。

6. 處理來自客戶端的 HTTP 請求

HTTP 請求是客戶端(例如,Web 瀏覽器或移動應(yīng)用)與您所構(gòu)建的 API 進(jìn)行數(shù)據(jù)請求或執(zhí)行其他操作的主要通信手段。為了妥善處理這些請求,您需要編寫 PHP 代碼,使其能夠接收請求并返回相應(yīng)的響應(yīng)。

PHP 提供了一系列函數(shù),幫助您獲取當(dāng)前請求的相關(guān)信息。例如,$_SERVER 變量包含了 HTTP 方法(GET、POST 等)、URL 路徑、查詢參數(shù)以及請求體數(shù)據(jù)等關(guān)鍵信息。同時,$_GET 和 $_POST 數(shù)組則分別用于存儲 GET 和 POST 請求中的參數(shù)。

在處理不同類型的請求時,您需要編寫相應(yīng)的 PHP 代碼,以分析傳入的數(shù)據(jù)并確定執(zhí)行的操作。例如,若客戶端通過 GET 請求從 API 獲取數(shù)據(jù),您的代碼可能會執(zhí)行 SQL 查詢來檢索數(shù)據(jù),并將其作為 JSON 格式的響應(yīng)返回。若客戶端通過 POST 請求創(chuàng)建新記錄,您的代碼則可能會將新數(shù)據(jù)插入 MySQL 數(shù)據(jù)庫,并返回操作成功的消息。

7. 強(qiáng)化錯誤處理與驗(yàn)證,確保 API 的穩(wěn)健與安全

在 API 中實(shí)施有效的錯誤處理和驗(yàn)證至關(guān)重要,這要求您編寫能夠檢測并響應(yīng)錯誤,同時驗(yàn)證用戶輸入的 PHP 代碼。PHP 提供了多個內(nèi)置函數(shù),助力您進(jìn)行錯誤處理,例如 trigger_error() 用于觸發(fā)一個用戶級別的錯誤/警告/通知信息,而 set_error_handler() 則允許您設(shè)置一個用戶自定義的錯誤處理函數(shù)。

在驗(yàn)證方面,您可能需要借助正則表達(dá)式、PHP 過濾器或自定義驗(yàn)證函數(shù)來確保用戶輸入的數(shù)據(jù)符合預(yù)期格式和范圍。通過實(shí)施嚴(yán)格的錯誤處理和驗(yàn)證機(jī)制,您可以顯著提升 API 的穩(wěn)健性和安全性。

8. 將 API 部署到您的 Web 服務(wù)器,并使用 cURL 或 Postman 等工具對其進(jìn)行測試。

要將 API 部署上線,您需將 PHP 文件及任何必需資源(例如 CSS、JavaScript 文件或圖像)上傳至您的 Web 服務(wù)器。這一步驟可能還需根據(jù)您的 Web 服務(wù)器配置調(diào)整 .htaccess 文件,以確保 API 路由準(zhǔn)確無誤。

一旦 API 部署完成,您即可借助 cURL 或 Postman 等工具來對其進(jìn)行測試。這些工具功能強(qiáng)大,能讓您輕松地向 API 發(fā)送 HTTP 請求,并即時查看響應(yīng)數(shù)據(jù)。通過它們,您可以測試各種請求類型(例如 GET、POST、PUT 或 DELETE),驗(yàn)證錯誤處理與數(shù)據(jù)驗(yàn)證機(jī)制的有效性,并確保 API 能夠以正確的格式(如 JSON 或 XML)返回準(zhǔn)確無誤的數(shù)據(jù)。

在測試 API 時,請重點(diǎn)關(guān)注性能、安全性及可用性。您應(yīng)在不同環(huán)境下(例如高流量時段或網(wǎng)絡(luò)狀況不佳時)對 API 進(jìn)行測試,以確保其響應(yīng)迅速且運(yùn)行穩(wěn)定。同時,務(wù)必檢查 API 是否存在潛在的安全隱患(例如 SQL 注入或跨站腳本攻擊),并確保 API 的設(shè)計(jì)便于客戶端使用與理解。

下面是一個從 MySQL 數(shù)據(jù)庫檢索數(shù)據(jù)的簡單 REST API 的示例 PHP 代碼:

原文鏈接:https://blog.dreamfactory.com/create-a-mysql-rest-api-in-minutes-using-dreamfactory

上一篇:

為什么API開發(fā)對現(xiàn)代應(yīng)用至關(guān)重要?

下一篇:

掌握合約優(yōu)先API開發(fā):關(guān)鍵策略和優(yōu)勢
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

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

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

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

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

#AI深度推理大模型API

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

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