Github 允許您向請求添加三個參數

如果你想要獲取我最近推送過的存儲庫列表,你可以將排序方式設置為push。

https://api.github.com/users/zellwk/repos?sort=pushed

你怎么知道這個端點是否有效呢?好吧,是時候試一試了!

使用curl測試端點

您可以使用任何編程語言發送請求。JavaScript 用戶可以使用 Fetch API 和 jQuery 的 Ajax 方法等方法;Ruby 用戶可以使用 Ruby 的 Net::HTTP 類,Python 用戶可以使用 Python Requests;等等。

在本文中,我們將使用命令行工具cURL。我們使用cURL是因為API文檔通常會參考cURL。如果您了解如何使用 cURL,那么理解 API 文檔就不會有問題。然后,你可以輕松地用你喜歡的語言執行請求。

在繼續之前,您需要確保計算機上已安裝 cURL。打開您的終端,輸入curl –version 。此命令檢查您在系統上安裝的 cURL 版本。

curl --version

如果您沒有安裝 cURL,您將收到 “command not found” 錯誤。如果您收到此錯誤,則需要在繼續之前安裝 curl。

要使用 cURL,你輸入curl,然后鍵入要請求的終端節點。例如,要獲取 Github 的根終端節點,你輸入以下內容:

curl https://api.github.com

按 Enter 鍵后,您應該會收到來自 Github 的響應,如下所示:

來自 Github 的根端點的響應

要獲取用戶存儲庫的列表,你需要將端點修改為正確的路徑,就像我們上面討論的那樣。要獲取我的存儲庫列表,您可以使用以下命令:

curl https://api.github.com/users/zellwk/repos

如果您希望在 cURL 中包含查詢參數,,請確保在?和=字符前加上反斜杠(\)。。這是因為?和=是命令行中的特殊字符。你需要在它們前面加上\,以便命令行將它們解釋為普通字符:

curl https://api.github.com/users/zellwk/repos\?sort\=pushed

嘗試使用任一命令并執行請求!你將獲得與Github根端點類似的響應(但包含更多數據)。

JSON格式

JSON(JavaScript 對象表示法):一種通過 REST API 發送和請求數據的常用格式。Github發送給你的響應也是以JSON格式編寫的。

JSON 對象看起來像 JavaScript 對象。在 JSON 中,每個屬性和值都必須用雙引號括起來,如下所示:

{
"property1": "value1",
"property2": "value2",
"property3": "value3"
}

返回請求剖析

您已經了解到請求由四個部分組成。

  1. 終端節點
  2. 方法
  3. 標頭
  4. 數據(或正文)

讓我們繼續了解構成請求的其他內容。

方法

method 是您發送到服務器的請求類型。您可以從以下五種類型中進行選擇:

這些方法為你正在發出的請求提供意義。它們用于執行四種可能的操作:創建、讀取、更新和刪除(CRUD)。

”GET’此請求用于從服務器獲取資源。如果您執行 ‘GET’ 請求,服務器會查找您請求的數據并將其發送回給您。換句話說,“GET”請求執行“READ”操作。這是默認的請求方法。
‘POST’此請求用于在服務器上創建新資源。如果您執行 ‘POST’ 請求,服務器會在數據庫中創建一個新條目,并告訴您創建是否成功。換句話說,“POST”請求執行“CREATE”操作。
‘PUT’ 和 ‘PATCH’這兩個請求用于更新服務器上的資源。如果您執行 ‘PUT’ 或 ‘PATCH’ 請求,服務器會更新數據庫中的條目并告訴您更新是否成功。換句話說,“PUT”或“PATCH”請求執行“UPDATE”操作。
‘刪除’此請求用于從服務器中刪除資源。如果您執行 ‘DELETE’ 請求,服務器將刪除數據庫中的條目并告訴您刪除是否成功。換句話說,“DELETE”請求執行“DELETE”操作。

API 讓您知道使用每個請求的請求方法。例如,要獲取用戶倉庫的列表,您需要一個GET 請求:

需要 GET 請求才能從用戶那里獲取存儲庫列表。要創建新的 Github 存儲庫,您需要一個 POST 請求:

需要 POST 請求來創建一個新的存儲庫

你可以通過在 cURL 中寫入 -X 或 –request,然后跟隨請求方法來設置請求方法。以下命令嘗試通過 cURL 創建一個存儲庫:

curl -X POST https://api.github.com/user/repos

嘗試運行此請求。您將收到一個響應,告訴您需要身份驗證。(稍后將詳細介紹身份驗證)。

{
"message": "Requires authentication",
"documentation_url": "https://developer.github.com/v3"
}

頭部信息

頭部信息用于向客戶端和服務器提供信息。它可用于多種用途,例如身份驗證和提供有關正文內容的信息。您可以在 MDN 的 HTTP Headers Reference 中找到有效標頭的列表。

HTTP 頭部是屬性-值對,用冒號分隔。下面的示例顯示了一個告訴服務器期望 JSON 內容的頭部。

"Content-Type: application/json". Missing the opening ".

你可以通過使用 -H 或 –header 選項在 cURL 中發送 HTTP 頭部信息。要將上述頭部信息發送到 GitHub 的 API,你可以使用以下命令:

curl -H "Content-Type: application/json" https://api.github.com

(注意:Content-Type 頭部不是 GitHub API 工作的必要條件。這只是一個示例,用于說明如何將標頭與 cURL 一起使用)。

要查看已發送的頭部信息,你可以在發送請求時使用 -v 或 –verbose 選項,如下所示:

curl -H "Content-Type: application/json" https://api.github.com -v
一張顯示通過詳細選項從 GitHub 根端點收到的響應的圖片

這里,* 指的是 cURL 提供的額外信息。> 指的是請求頭部,< 指的是響應頭部。

數據(或“正文”)

數據(有時稱為 “body” 或 “message”) 包含要發送到服務器的信息。這個選項僅用于 POST、PUT、PATCH 或 DELETE 請求。

要通過 cURL 發送數據,你可以使用 -d 或 –data 選項:

curl -X POST <URL> -d property1=value1

要發送多個數據字段,你可以創建多個 -d 選項:

curl -X POST <URL> -d property1=value1 -d property2=value2

如果合適,你可以將請求拆分成多行 \ 以使其更易讀:

curl -X POST <URL> \
-d property1=value1 \
-d property2=value2

如果您知道如何啟動服務器,你可以創建一個 API 并測試你自己的數據。如果您不知道,但有足夠的勇氣嘗試,您可以按照本文學習使用 Node、Express 和 MongoDB 創建服務器。

如果您不想啟動您的服務器,您可以轉到 Requestbin.com(它是免費的!)并單擊 “create endpoint”。您將獲得一個可用于測試請求的 URL,如下圖所示。https://requestb.in/1ix963n1

Request Bin 提供的唯一 URL 只能使用 48 小時

如果要測試您的請求,請確保創建自己的請求箱。請求 bin 僅在創建后保持打開 48 小時。當您閱讀本文時,我在上面創建的 bin 早已不見了。

現在,嘗試將一些數據發送到您的請求 Bin,然后刷新 Bin 的網頁。您將看到一些數據,如下所示:

curl -X POST https://requestb.in/1ix963n1 \
-d property1=value1 \
-d property2=value2
你發送到你的 bin 的請求將顯示如下:

默認情況下,cURL 發送數據,就像通過頁面上的“表單字段”發送數據一樣。如果要發送 JSON 數據,你需要將 Content-Type 設置為 application/json,并且需要將你的數據格式化為 JSON 對象,如下所示:

curl -X POST https://requestb.in/1ix963n1 \
-H "Content-Type: application/json" \
-d '{
"property1":"value1",
"property2":"value2"
}'
以 JSON 格式發送數據

這就是您需要了解的有關請求結構的所有信息。

現在,還記得當你嘗試通過 GitHub 的 API 發送一個 POST 請求時,你得到了一條消息說“Requires authentication”嗎?這是因為你沒有權限執行這個 POST 請求!

認證

你不會允許任何人未經你的許可訪問你的銀行賬戶,對嗎?同樣的道理,開發人員會采取措施,確保您只有在授權的情況下才能執行操作。這可以防止其他人冒充您。

由于 POST、PUT、PATCH 和 DELETE 請求會修改數據庫,開發人員幾乎總是將它們放在認證墻后面。在某些情況下,GET 請求也需要認證(例如,當你訪問你的銀行賬戶以檢查當前余額時)。

在 Web 上,有兩種主要方法可以驗證自己的身份:

  1. 使用用戶名和密碼(也稱為基本身份驗證)
  2. 使用 secret 令牌

秘密令牌方法包括 oAuth,它允許您使用 Github、Google、Twitter、Facebook 等社交媒體網絡對自己進行身份驗證。

在本文中,您將只學習如何使用用戶名和密碼的基本身份驗證。如果您對使用 oAuth 進行身份驗證感興趣,我建議您閱讀 Zack Grossbart 撰寫的“您需要了解的有關 OAuth2 和使用 Facebook 登錄的信息”。

要使用 cURL 進行基本認證,你可以使用 -u 選項,后面跟著你的用戶名和密碼,如下所示:

curl -x POST -u "username:password" https://api.github.com/user/repos

嘗試在上述請求中使用您的用戶名和密碼進行身份驗證。身份驗證成功后,您將看到響應從“需要身份驗證”更改為“解析 JSON 時出現問題”。

這是因為你還沒有提供任何數據(所有 POST、PUT、PATCH 和 DELETE 請求都需要數據)給服務器。

憑借您目前所學的知識,您應該能夠編輯上面的代碼,以通過 cURL 創建 Github 存儲庫。我會留給你自己嘗試!

現在,我們來談談 HTTP 狀態代碼和錯誤消息。

HTTP狀態代碼和錯誤消息

您之前收到的一些消息(如“需要身份驗證”和“解析 JSON 時出錯”)是錯誤消息。它們僅在您的請求有問題時出現。 HTTP 狀態碼讓你快速了解響應的狀態。范圍從 100+ 到 500+。通常,這些數字遵循以下規則:

  1. 200+ 表示請求已成功
  2. 300+ 表示請求被重定向到另一個 URL
  3. 400+ 表示發生了源自客戶端的錯誤
  4. 500+ 表示發生了源自服務器的錯誤

你可以使用詳細選項(-v 或 –verbose)或頭部選項(-I 或 –head)調試響應的狀態。

例如,如果你嘗試在沒有提供用戶名和密碼的情況下向 POST 請求添加 -I,你會得到一個401狀態碼(未授權):

未授權請求示例

如果你的請求無效是因為你的數據錯誤或缺失,你通常會得到一個400狀態碼(錯誤請求)。

錯誤請求示例

要獲取有關特定 HTTP 狀態碼的更多信息,你可能需要查閱 MDN 的 HTTP 狀態參考。

API版本

開發人員會不時更新他們的 API。有時,API 可能會發生很大變化,以至于開發人員決定將其 API 升級到另一個版本。如果發生這種情況,并且你的應用程序出現故障,通常是因為您已經為較舊的 API 編寫了代碼,但您的請求指向了較新的 API。

您可以通過兩種方式請求特定的 API 版本。選擇哪種方式取決于 API 的編寫方式。

這兩種方式是:

  1. 直接在終端節點中
  2. 在請求標頭中

例如,Twitter 使用第一種方法。在撰寫本文時,Twitter 的 API 版本為 1.1,這可以通過其端點明顯看出:

https://api.twitter.com/1.1/account/settings.json

另一方面,GitHub 使用第二種方法。截至撰寫本文時,GitHub 的 API 版本是 3,你可以通過一個 Accept 頭來指定版本:

curl https://api.github.com -H Accept:application/vnd.github.v3+json

總結

在本文中,您了解了什么是 REST API 以及如何使用 cURL 進行 GET、POST、PUT、PATCH 和 DELETE 方法的請求。此外,你還學會了如何通過 -u 選項對請求進行身份驗證,以及 HTTP 狀態碼的含義。

我希望本文能幫助您充分了解 REST API,并且您可以在創建應用程序時流暢地使用它們。

原文鏈接:https://www.smashingmagazine.com/2018/01/understanding-using-rest-api/

上一篇:

REST APIs與微服務:關鍵差異

下一篇:

深入解析granularity是什么?顆粒度中文詳解
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

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

10個渠道
一鍵對比試用API 限時免費