WordPress REST API:如何訪問、使用和保護它(完整教程)

已發表: 2023-03-23

如果您打算成為一名 WordPress 開發人員,您會遇到一種叫做“REST API”的東西。 這是一個擴展 WordPress 功能的界面,使您能夠將平台與其他應用程序連接起來。 一些開發人員發現它作為他們流程的一部分非常有用——尤其是當他們希望實現高級功能時。

幸運的是,您無需成為經驗豐富的開發人員即可獲得 WordPress REST API 的專業知識。 一旦您對界面及其工作原理有了深入的了解,您就可以輕鬆地將其應用到您的網站建設項目中。

在這篇文章中,我們將提供 WordPress REST API 的深入指南。 我們將討論它是什麼、如何使用它以及如何保護它免受威脅。 我們還將向您展示如何修復常見的 REST API 錯誤、如何將接口與其他框架一起使用,以及它與其他 WordPress API 解決方案的比較。 最後,我們將討論一些常見問題。

什麼是 WordPress REST API?

要了解 WordPress REST API,我們需要分解它的各個組件。 讓我們從介紹 API 開始。

什麼是 API?

應用程序編程接口 (API) 是一種使兩個應用程序能夠相互通信的程序。 它充當兩個軟件之間的中介,促進無縫協作。

例如,如果您想在您的網站上顯示 Google 產品(如地圖),則需要使用 Google Maps API。

谷歌云 API 庫

這使您的 WordPress 站點能夠與 Google 地圖進行通信,因此它可以提取顯示這些地圖所需的所有相關數據和功能。

像 Google 一樣,其他公司也有 API 並將它們提供給 Web 開發人員。 這些產品可能非常有吸引力,因為它們消除了從頭開始編寫功能(如地圖)代碼的需要。 相反,您可以使用第三方軟件並通過 API 將其連接到您的站點。

什麼是休息?

Representational State Transfer (REST) 是開發人員在創建 API 時必須遵循的一組準則。 因此,REST API 是根據這些標準構建的接口。

通常,REST API 遵循以下原則:

  • 客戶端-服務器分離: API 應該使客戶端(或網站)和服務器保持彼此分離,並繼續彼此獨立地運行。
  • 緩存: REST API 應盡可能使用可緩存數據,以提高性能並讓網站知道哪些信息可以緩存。
  • 無狀態: REST API 不能在其服務器上存儲有關它們連接到的網站的任何信息,並且只應提供處理請求所需的信息。
  • 統一的接口:資源請求應該以相同的方式處理,無論其來源如何。
  • 分層架構: REST API 是圍繞分層系統構建的,每一層都履行特定的角色,並且與其他層分開工作。 這使 API 更安全且更易於更新。

由於 REST API 符合這些標準,因此它可以提供更高的安全性和效率。

WordPress REST API 有什麼作用?

WordPress 有自己的 REST API。 這使該平台能夠與幾乎所有其他 Web 應用程序和網站進行通信,無論它們使用何種編程語言。

使用此 API,第三方應用程序將能夠訪問您的 WordPress 數據庫並從中提取數據。 事實上,大多數 WordPress 插件和主題都使用平台的 REST API 來正常運行。

WordPress REST API 在 4.7 版中作為核心軟件的一部分發布。 在此之前,它只能作為插件使用。

雖然 WordPress 軟件是用 PHP 構建的,但 REST API 以 JSON(JavaScript 對象表示法)對象的形式發送和接收數據,這為開發人員開闢了新的可能性。

最常見的 REST API 命令是什麼?

REST API 旨在通過 HTML 命令接收和響應特定請求。

您將使用的最常見命令是:

  • GET:您可以使用此命令從服務器獲取特定資源,例如帖子或數據。
  • POST:此命令允許您通過添加代碼來修改服務器上的資源。
  • PUT:使用此命令,您可以編輯服務器上已有的資源。
  • DELETE:此命令從服務器中刪除資源。

這些命令後跟一行,提供有關請求的更多信息。 這些被稱為端點。

例如,如果您想檢索您網站上已發布帖子的列表,您可以使用以下端點:

 GET http://mysite.com/wp-json/wp/v2/posts/?status=published

讓我們看另一個例子。 如果要添加新頁面,可以使用以下命令:

 POST http://mysite.com/wp-json/wp/v2/posts/page

使用這四個命令可以做很多事情。 您可以在 WordPress 開發人員資源頁面上找到端點列表。

WordPress REST API 的真實示例

現在您對 WordPress REST API 的工作原理有了基本的了解,讓我們從 WordPress.com 開始看一些現實生活中的例子。

WordPress.com 管理儀表板(稱為“Calypso”)是通過 REST API 完全用 JavaScript 構建的。

WordPress Calypso 儀表板,使用 REST API

Calypso 是一款網絡和桌面應用程序,用戶可以使用它添加新內容、編輯現有帖子等。 它使用 REST API 訪問 WordPress.com 網站上的數據。

另一個例子是塊編輯器。 在自託管 WordPress 中,塊編輯器使用 REST API 與您的數據庫交互並創建塊。

許多在線出版物,如今日美國,也使用 WordPress REST API。 這使他們能夠自動在其他新聞應用程序(如 Apple News)上發布文章。

如何在 WordPress 中啟用和禁用 REST API

您無需執行任何操作即可啟用 REST API——它內置於 WordPress 中。 在帖子的後面,我們將向您展示如何訪問它。

雖然 REST API 是使用 WordPress 構建應用程序的強大工具,但它會使您的站點容易受到分佈式拒絕服務 (DDoS) 攻擊和惡意軟件的攻擊。 此外,黑客可能能夠通過與其他應用程序的連接來訪問您的數據。

不建議禁用 WordPress REST API。 那是因為這樣做會導致塊編輯器和您網站上的任何插件出現問題。

如果您仍想繼續並禁用它,最簡單的方法是使用像 WPCode 這樣的插件。

WP Code首頁圖片

在站點上安裝並激活插件後,導航到 WordPress 儀表板中的代碼片段 → 庫

WP代碼片段庫

在這裡,尋找一個名為Disable WordPress REST API的選項。 當您找到它時,將鼠標懸停在它上面並選擇Use snippet

使用“禁用 REST API”片段

這將啟動一個帶有代碼預覽的頁面。

編輯 WPCode 片段

如果向下滾動到“插入”框,則可以選擇“自動插入”選項,以便插件自動將此代碼應用到您的站點。

使用自動插入功能

然後,滾動回到頂部並將切換開關從Inactive移動到Active。 最後,單擊更新以使這些更改生效。

如何使用 WordPress REST API

現在,讓我們看看如何使用 WordPress REST API。 我們已經在上面介紹了一些示例,但在本節中,我們將向您展示如何訪問和獲取數據。

第 1 步:訪問 REST API

如果您想從實時 WordPress 網站獲取數據,您可以直接從瀏覽器訪問 REST API。 您所要做的就是在搜索欄中輸入以下地址(替換為您自己的域名和擴展名):

 mysite.com/wp-json/wp/v2

這將顯示您的 WordPress 網站的 JSON 文件。

查看 REST API

然後,您可以向此 URL 添加元素以訪問特定數據,我們將在下一步中向您展示。

第 2 步:向 REST API 發出請求

正如我們之前提到的,您可以使用端點訪問站點上的特定數據。 如果您想檢索所有帖子的列表,只需將端點/posts添加到您的地址:

 mysite.com/wp-json/wp/v2/posts

如果您想檢索特定帖子,只需添加其 ID(您可以在 WordPress 儀表板的帖子頁面上找到它):

 mysite.com/wp-json/wp/v2/posts/4567

同時,如果您想獲取有關用戶的數據,您可以使用以下請求:

 mysite.com/wp-json/wp/v2/users

這些只是簡單的示例,但您可以做更多的事情。 例如,您可以獲取包含特定術語的帖子,將帖子的狀態從“草稿”更改為“發布”等等。

第 3 步:驗證您的請求

WordPress REST API 使您能夠在您的網站上獲取任何類型的數據,但並非所有數據都是公開的。 在某些情況下,您需要驗證您的請求。

要向 WordPress REST API 發出經過身份驗證的請求,您首先需要獲得一個 API 密鑰。 為此,請導航到 WordPress 儀表板中的用戶 → 配置文件

然後,向下滾動到“應用程序密碼”部分。 在這裡,您需要輸入密碼名稱(供參考),然後單擊“添加新應用程序密碼”

在 WordPress 中創建應用程序密碼

這將為您生成一個 API 密鑰,您需要在請求中使用它。 例如,如果您的 API 密鑰是“1234567890”,您可以將其包含在授權標頭中,如下所示:

 https://mysite.com/wp-json/wp/v2/posts?Authorization=Bearer1234567890

請記住將代碼 1234567890 替換為您複製的 API 密鑰並刪除所有空格。

您還可以檢索特定作者撰寫的帖子列表,以及他們的用戶 ID。 您可以通過轉到 WordPress 儀表板中的“用戶”部分並單擊作者姓名來找到他們的 ID。 該 ID 將顯示在其作者頁面的 URL 中。

假設作者的名字是“Joe”,他們的 ID 是“123”。 在這種情況下,您可以使用以下 URL 來檢索 Joe 撰寫的所有帖子的列表:

 https://mysite.com/wp-json/wp/v2/posts?author=123&Authorization=Bearer1234567890

如果您找不到用戶的 ID,則他們的個人資料可能已被修改,以致於 ID 不再顯示。 在這種情況下,您可以檢索用戶使用他們的登錄名或電子郵件地址而不是 ID 撰寫的所有帖子的列表。

為此,您必須在請求中使用“slug”參數而不是“author”參數:

 https://mysite.com/wp-json/wp/v2/posts?slug=joe&Authorization=Bearer1234567890

“slug”參數使您能夠指定用戶的登錄名或電子郵件地址。 WordPress REST API 將返回用戶撰寫的所有帖子的列表。

何時使用 WordPress REST API

WordPress REST API 可用於範圍廣泛的項目。 這裡有一些例子:

  • 將 WordPress 網站與移動應用程序集成。 如果你是開發者, 您可以使用 REST API 從移動應用程序檢索和編輯 WordPress 網站上的數據。 這使您能夠構建與您的站點交互的自定義應用程序。
  • 創建自定義集成。 使用 WordPress REST API,您可以創建與 CRM 工具等其他軟件的自定義集成。
  • 構建自定義腳本。 您可以使用 REST API 自動執行 WordPress 網站上的某些任務,例如安排帖子或更新用戶配置文件。

如您所見,REST API 使您能夠將 WordPress 與在其他平台上構建的應用程序或網站集成。

何時使用 WordPress REST API

雖然 WordPress REST API 可以是一個強大的工具,但它可能並不總是適合您的項目。 讓我們看看您可能不想使用它的幾個原因。

您可能還記得,WordPress REST API 是使用 JavaScript 構建的。 因此,如果您正在開發不支持 JavaScript 的應用程序,那麼如果您使用的是 REST API,則該應用程序將無法正常運行。

此外,基於 JavaScript 構建的應用程序可能不太容易訪問。 例如,它呈現動態內容的方式可能與屏幕閱讀器不兼容。 因此,它可能會使有視覺障礙的用戶無法訪問您的內容。

如何保護 WordPress REST API 免受攻擊

如前所述,使用 WordPress REST API 會使您的站點容易受到威脅。 API 充當兩個平台之間的橋樑,黑客可能會通過此連接找到進入您網站的方法。

因此,在您開始使用 WordPress REST API 之前,創建 WordPress 站點的備份非常重要。 這樣,如果出現問題,您可以恢復最新版本的內容。

此外,您需要確保已採取足夠的安全措施。 這意味著使用 Jetpack Protect 之類的工具。

Jetpack Protect 主頁

此插件附帶安全功能,包括惡意軟件掃描、漏洞掃描和 Web 應用程序防火牆 (WAF)。

此外,在使您的更改生效之前,最好在 WordPress 暫存站點上使用 REST API。 這樣,如果您不小心破壞了您的網站,也不會影響前端的用戶體驗。

如何修復常見的 REST API 錯誤和問題

使用 WordPress REST API 時,您可能會遇到一些錯誤。 因此,讓我們來看看一些最常見的問題以及您可以採取的解決這些問題的步驟。

緩慢的響應時間和超時

調用 WordPress REST API 時,您可能會遇到響應緩慢和超時的情況。 這些問題通常是由以下因素引起的:

  • 服務器資源不足。 您的服務器可能沒有足夠的資源來處理通過 REST API 發出的請求。 在這種情況下,您需要升級到更強大的 WordPress 託管計劃。
  • 插件或主題衝突。 WordPress 插件和主題有時會與 REST API 發生衝突。 發生這種情況時,請嘗試禁用所有插件並切換到默認主題以查看是否可以解決問題。 如果是這樣,您可以一次重新激活一個插件以找出罪魁禍首。
  • 數據大小。 API 調用期間的大數據傳輸可能會導致超時。 為防止這種情況,您可以嘗試減少每頁顯示的項目數量(我們將在後面的帖子中向您展示如何執行此操作)。
  • 數據庫問題。 如果您的 WordPress 數據庫未優化,則在調用 REST API 時可能會導致響應時間變慢和超時。 您可以通過刪除不必要的數據並安裝優化插件來優化它。

此外,您可能希望使用 Google Cloud 的操作套件(以前稱為 Stackdriver)和 Microsoft 的 Application Insights 等工具來跟踪 API 的性能。 這些工具可以深入了解 WordPress REST API 的性能,並幫助您確定響應時間緩慢的原因。

調用 REST API 時出現 403 Forbidden 錯誤

403 Forbidden 錯誤是一個 HTTP 狀態代碼,表示客戶端無權訪問所請求的資源。 讓我們看一下此錯誤的一些常見原因和可能的解決方案:

  • API 密鑰不正確。 如果請求需要 API 密鑰,請確保您使用的密鑰有效並且在請求標頭中正確傳遞。
  • 無效隨機數。 “隨機數”是使用一次的隨機數,以防止請求偽造。 如果它無效,可能會導致 403 禁止錯誤。
  • 用戶權限。 您還需要確保您擁有訪問特定 API 端點的必要權限。 如果您不是該網站的所有者,您可能需要請求管理員授予您正確的權限。
  • 安全插件。 安全插件可以阻止 API 調用,因為它將其視為安全威脅。 您可以在插件設置中將 API 端點列入白名單以解決此類問題。
  • 防火牆。 您可能正在使用阻止 API 請求的防火牆。 確保防火牆設置正確,或嘗試在使用 API 時將其禁用。
  • 服務器配置。 有些服務器未配置為處理某些 API 調用,因此您可能需要聯繫您的託管服務提供商尋求幫助。

您還可以使用瀏覽器的開發人員工具來檢查網絡請求和請求標頭。 如果您使用 Chrome,只需按Ctrl+Shift+C即可打開 DevTools。

此外,您可以檢查服務器日誌以獲取有關該錯誤的更多信息。 您應該能夠通過您的託管帳戶訪問它們。 如果沒有,您可以向您的託管服務提供商尋求幫助。

REST API 遇到意外結果

“REST API 遇到意外結果”錯誤是一個常見問題。 它通常是由以下因素引起的:

  • 權限。 您可能沒有訪問所請求資源的正確權限。 如果是這種情況,您需要聯繫該站點的管理員。
  • 網址配置問題。 如果 API 端點 URL 配置不正確,就會發生此錯誤。 仔細檢查 URL 以確保它是正確的並且包含所有必要的查詢參數。
  • 命令不正確。 您可能對請求使用了錯誤的命令(例如 GET、POST、PUT、DELETE)。 檢查 API 文檔以確保您對特定端點使用正確的命令。
  • 請求格式不正確。 確保您在請求中使用正確的格式。 在 WordPress REST API 中,數據必須以 JSON 格式發送。
  • 錯誤的端點。 您可能正在嘗試調用不存在的端點。 在這種情況下,請仔細檢查終結點 URL 以確保其正確無誤。
  • 服務器端問題。 您的服務器可能遇到問題。 這在共享託管計劃中更為常見。 如果您遇到這種情況,可能是時候升級到具有更多資源的服務器了。

您可能還想禁用插件以查看問題是否已解決。 如前所述,某些工具可能會導致與 WordPress REST API 的兼容性問題。

rest_api_init 不工作

“rest_api_init not working”錯誤是另一個常見的 WordPress REST API 錯誤。 一般是插件和主題衝突,以及服務器資源有限導致的。

儘管如此,還有其他因素可能導致 WordPress REST API 無法正常工作,例如:

  • 自定義 REST API 端點。 如果您使用自定義端點發出請求,請確保您使用的是正確的掛鉤和函數。
  • .htaccess文件。 您可能需要檢查您的.htaccess文件以確保其設置正確。
  • CORS 錯誤。 如果您嘗試發出跨源請求 (CORS) 而 WordPress REST API 不工作,則可能是服務器未配置為接受它們。 您可能需要聯繫您的託管服務提供商以查看服務器是否接受 CORS。

此外,您可能正在使用不支持 API 的舊 WordPress 安裝。 如果是這樣,請務必升級到最新版本。

基本身份驗證不起作用

嘗試使用基本身份驗證調用 WordPress REST API 時,可能會出現“基本身份驗證不起作用”錯誤。 基本身份驗證是一種內置於 HTTP 協議中的簡單身份驗證方案。 它使用用戶名和密碼來驗證某人的身份。

以下是此錯誤的一些常見原因(以及解決方法):

  • 憑據不正確。 檢查請求標頭中的用戶名和密碼以確保它們正確無誤。
  • 安全套接字層 (SSL) 問題。 確保您安裝了有效的 SSL 證書並且配置正確。 如果不是,請查看我們的分步指南,了解如何獲得免費且有效的 SSL 證書。
  • HTTP 到 HTTPS 重定向。 某些網站配置為將 HTTP 請求重定向到 HTTPS。 如果瀏覽器嘗試在 HTTP 上進行身份驗證,您可能會遇到此錯誤。 因此,您需要確保在 HTTPS 端點上運行請求。

與其他 REST API 問題一樣,此錯誤也可能是由主題和插件衝突引起的。 再一次,您需要切換到默認主題並停用插件以解決問題。

如果這沒有幫助,您可能需要暫時禁用防火牆。 這可能會阻止您的身份驗證請求。

如果您正在製作 CORS,您的服務器可能未配置為接受它們。 值得與您的託管服務提供商聯繫,看看他們是否可以做些什麼。

最後,如果您不是站點的管理員,您可能沒有正確的權限或角色來完成請求。 在這種情況下,您需要聯繫網站所有者。

REST API 的高級用例

得益於 WordPress REST API,您可以使用流行的框架和其他編程語言從您的站點檢索數據。 讓我們看幾個例子。

如何將 WordPress REST API 與 React 結合使用

React 是一個流行的 JavaScript 庫,用於構建用戶界面。 您可以使用 Node-WPAPI 客戶端向 WordPress REST API 發出 HTTP 請求。

例如,要檢索 WordPress 網站上的帖子列表,您需要在 Node-WPAPI 中輸入以下內容:

 import WPAPI from 'wpapi'; const wp = new WPAPI({ endpoint: 'http://example.com/wp-json' }); wp.posts().then(posts => {  console.log(posts); });

有關將 WordPress REST API 與 React 結合使用的更多信息,您可以查看 Node-WPAPI 文檔。

如何在 Angular 中使用 WP REST API

Angular 是一個用於開發 Web 應用程序的 JavaScript 框架。 要將它與 WordPress REST API 一起使用,您需要使用@angular/common/http模塊。

例如,您可以輸入以下代碼來檢索帖子列表:

 import { HttpClient } from '@angular/common/http'; @Injectable() export class PostService {  constructor(private http: HttpClient) {}  getPosts(): Observable<any> {    return this.http.get('http://mysite.com/wp-json/wp/v2/posts');  } }

您可以查看 Angular 文檔,了解有關使用其 HttpClient 向 WordPress REST API 發出請求的更多信息。

如何通過 Python 使用 WordPress REST API

您還可以將 WordPress REST API 與 Python 結合使用。 這是一種流行的編程語言,可用於構建 Web 應用程序和其他軟件。

首先,您需要使用Requests庫。 如果您想獲取您的 WordPress 帖子列表,您可以輸入以下內容:

 import requests response = requests.get('http://example.com/wp-json/wp/v2/posts') posts = response.json() print(posts)

您可以閱讀 Requests 庫文檔以獲取更詳細的說明。

REST API 與其他 WordPress API 解決方案相比如何?

您可能想知道 REST API 與其他 WordPress API 解決方案有何不同。 為了給您一個想法,我們將把它與一些最流行的替代方案進行比較。

WordPress REST API 與 AJAX

WordPress REST API 提供了一種訪問 WordPress 數據的有效方法。 它使開發人員能夠構建自定義應用程序並與 WordPress 集成。

同時,WordPress AJAX API 是訪問 WordPress 數據的較舊方法。 它是在 WordPress 2.0 中引入的,使開發人員能夠使用 JavaScript 從站點的前端發出異步請求。

WordPress AJAX API 在功能方面可能有些限制,因此不建議在復雜項目中使用。

WordPress REST API 與 WPGraphQL

WPGraphQL 是 WordPress 的 GraphQL 實現,它提供了一種訪問 WordPress 數據的替代方法。 GraphQL 是一種用於 API 的查詢語言。 它使客戶能夠準確地請求他們需要的數據,僅此而已。

與 WordPress REST API 不同,WPGraphQL 需要為每個需要訪問的用戶生成單獨的應用程序密碼。 另外,由於它使用更複雜的查詢語言,它在傳送內容時可能會有點慢。

WordPress REST API 與 XML-RPC

在 WordPress 1.5 中引入,WordPress XML-RPC API 使您能夠使用 XML-RPC 協議向 WordPress 發出遠程請求。

XML-RPC 簡單輕量,因此可以更快地交付結果。 問題是,與 Ajax 一樣,與 WordPress REST API 相比,它的功能有限。

有關 WordPress REST API 的常見問題

在本指南中,我們涵蓋了有關 WordPress REST API 的大部分要點。 但是,為了以防萬一,讓我們看一下有關這個強大工具的一些常見問題。

WordPress REST API 有返回限制嗎?

默認情況下,WordPress REST API 的最大返回限制為每頁 100 個項目。 這意味著,如果您向返回項目列表(如帖子、頁面或用戶)的端點發出請求,API 將僅在響應中顯示最多 100 個項目。

幸運的是,您可以使用“per_page”參數將限制增加到每頁最多 500 個項目。

例如,如果您希望每頁顯示 200 個項目,則可以使用以下內容:

 https://mysite.com/wp-json/wp/v2/posts?per_page=200

請記住,您還可以減少每頁顯示的項目數。

我可以將 REST API 與 WooCommerce 一起使用嗎?

WooCommerce 有自己的 REST API。 WooCommerce REST API 使您能夠訪問和修改 WooCommerce 商店中的數據。 這包括有關產品、訂單和客戶的信息。 此外,您可以使用 WooCommerce REST API 將 WooCommerce 與其他電子商務平台集成。

開始使用 WordPress REST API

WordPress REST API 使您能夠將您的站點與其他應用程序和第三方工具集成。 Web 開發人員可以使用它來獲取單頁應用程序的數據,將 WordPress 連接到移動應用程序等等。

此外,您可以將 WordPress REST API 與其他框架和編程語言一起使用,包括 React、Angular 和 Python。 儘管 WordPress REST API 是一個強大且可靠的工具,但備份您的站點並使用安全工具來防止通過這些連接進行的攻擊仍然很重要。

借助 Jetpack Protect,您可以保護 WordPress 站點免受惡意軟件和黑客攻擊,並在更安全的環境中使用 WordPress REST API。