
掌握ChatGPT插件與自定義GPT
如果你想要獲取我最近推送過的存儲庫列表,你可以將排序方式設置為push。
https://api.github.com/users/zellwk/repos?sort=pushed
你怎么知道這個端點是否有效呢?好吧,是時候試一試了!
您可以使用任何編程語言發送請求。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 的響應,如下所示:
要獲取用戶存儲庫的列表,你需要將端點修改為正確的路徑,就像我們上面討論的那樣。要獲取我的存儲庫列表,您可以使用以下命令:
curl https://api.github.com/users/zellwk/repos
如果您希望在 cURL 中包含查詢參數,,請確保在?和=字符前加上反斜杠(\)。。這是因為?和=是命令行中的特殊字符。你需要在它們前面加上\,以便命令行將它們解釋為普通字符:
curl https://api.github.com/users/zellwk/repos\?sort\=pushed
嘗試使用任一命令并執行請求!你將獲得與Github根端點類似的響應(但包含更多數據)。
JSON(JavaScript 對象表示法):一種通過 REST API 發送和請求數據的常用格式。Github發送給你的響應也是以JSON格式編寫的。
JSON 對象看起來像 JavaScript 對象。在 JSON 中,每個屬性和值都必須用雙引號括起來,如下所示:
{
"property1": "value1",
"property2": "value2",
"property3": "value3"
}
您已經了解到請求由四個部分組成。
讓我們繼續了解構成請求的其他內容。
方法
method 是您發送到服務器的請求類型。您可以從以下五種類型中進行選擇:
GET
POST
PUT
PATCH
DELETE
這些方法為你正在發出的請求提供意義。它們用于執行四種可能的操作:創建、讀取、更新和刪除(CRUD)。
”GET’ | 此請求用于從服務器獲取資源。如果您執行 ‘GET’ 請求,服務器會查找您請求的數據并將其發送回給您。換句話說,“GET”請求執行“READ”操作。這是默認的請求方法。 |
‘POST’ | 此請求用于在服務器上創建新資源。如果您執行 ‘POST’ 請求,服務器會在數據庫中創建一個新條目,并告訴您創建是否成功。換句話說,“POST”請求執行“CREATE”操作。 |
‘PUT’ 和 ‘PATCH’ | 這兩個請求用于更新服務器上的資源。如果您執行 ‘PUT’ 或 ‘PATCH’ 請求,服務器會更新數據庫中的條目并告訴您更新是否成功。換句話說,“PUT”或“PATCH”請求執行“UPDATE”操作。 |
‘刪除’ | 此請求用于從服務器中刪除資源。如果您執行 ‘DELETE’ 請求,服務器將刪除數據庫中的條目并告訴您刪除是否成功。換句話說,“DELETE”請求執行“DELETE”操作。 |
API 讓您知道使用每個請求的請求方法。例如,要獲取用戶倉庫的列表,您需要一個GET
請求:
需要 GET 請求才能從用戶那里獲取存儲庫列表。要創建新的 Github 存儲庫,您需要一個 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
這里,* 指的是 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
如果要測試您的請求,請確保創建自己的請求箱。請求 bin 僅在創建后保持打開 48 小時。當您閱讀本文時,我在上面創建的 bin 早已不見了。
現在,嘗試將一些數據發送到您的請求 Bin,然后刷新 Bin 的網頁。您將看到一些數據,如下所示:
curl -X POST https://requestb.in/1ix963n1 \
-d property1=value1 \
-d property2=value2
默認情況下,cURL 發送數據,就像通過頁面上的“表單字段”發送數據一樣。如果要發送 JSON 數據,你需要將 Content-Type 設置為 application/json,并且需要將你的數據格式化為 JSON 對象,如下所示:
curl -X POST https://requestb.in/1ix963n1 \
-H "Content-Type: application/json" \
-d '{
"property1":"value1",
"property2":"value2"
}'
這就是您需要了解的有關請求結構的所有信息。
現在,還記得當你嘗試通過 GitHub 的 API 發送一個 POST 請求時,你得到了一條消息說“Requires authentication”嗎?這是因為你沒有權限執行這個 POST 請求!
你不會允許任何人未經你的許可訪問你的銀行賬戶,對嗎?同樣的道理,開發人員會采取措施,確保您只有在授權的情況下才能執行操作。這可以防止其他人冒充您。
由于 POST、PUT、PATCH 和 DELETE 請求會修改數據庫,開發人員幾乎總是將它們放在認證墻后面。在某些情況下,GET 請求也需要認證(例如,當你訪問你的銀行賬戶以檢查當前余額時)。
在 Web 上,有兩種主要方法可以驗證自己的身份:
秘密令牌方法包括 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 狀態代碼和錯誤消息。
您之前收到的一些消息(如“需要身份驗證”和“解析 JSON 時出錯”)是錯誤消息。它們僅在您的請求有問題時出現。 HTTP 狀態碼讓你快速了解響應的狀態。范圍從 100+ 到 500+。通常,這些數字遵循以下規則:
你可以使用詳細選項(-v 或 –verbose)或頭部選項(-I 或 –head)調試響應的狀態。
例如,如果你嘗試在沒有提供用戶名和密碼的情況下向 POST 請求添加 -I,你會得到一個401狀態碼(未授權):
如果你的請求無效是因為你的數據錯誤或缺失,你通常會得到一個400狀態碼(錯誤請求)。
要獲取有關特定 HTTP 狀態碼的更多信息,你可能需要查閱 MDN 的 HTTP 狀態參考。
開發人員會不時更新他們的 API。有時,API 可能會發生很大變化,以至于開發人員決定將其 API 升級到另一個版本。如果發生這種情況,并且你的應用程序出現故障,通常是因為您已經為較舊的 API 編寫了代碼,但您的請求指向了較新的 API。
您可以通過兩種方式請求特定的 API 版本。選擇哪種方式取決于 API 的編寫方式。
這兩種方式是:
例如,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/