"objects": [
{ "id": 1, "item": "Lise with a Parasol", "artist": "Pierre Auguste Renoir", "collection":"Museum Folkwang, Essen, Germany", "date":"1867"},
{ "id": 2, "item": "The Theatre Box", "artist": "Pierre Auguste Renoir", "collection":"Courtauld Gallery, London, England", "date":"1874"},
{ "id": 3, "item": "Dance in the City", "artist": "Pierre Auguste Renoir", "collection":"Musée d'Orsay, Paris, France", "date":"1883"},
{ "id": 4, "item": "Dance at Bougival", "artist": "Pierre Auguste Renoir", "collection":"Musée d'Orsay, Paris, France", "date":"1883"}
]
}

這個 JSON 文件是數據庫的模擬版本。 可以使用 json-server 來查詢此數據。

查詢數據庫

在終端中,轉到添加了 db.json 的位置,然后輸入 json-server --watch db.json。 服務器將在端口 3000 上運行。 可以通過特殊格式的 URL 查詢它。

嘗試在瀏覽器的 URL 框中輸入 http://localhost:3000/objects。 你將看到數據庫中所有對象,以純 JSON 格式列出。

嘗試使用 URL 查詢此數據集:http://localhost:3000/objects/1 將顯示 ID 為 1 的項目。

了解 REST API 調用

你可能已經注意到,API 調用由幾部分組成。 REST API 調用的四個主要部分是終結點、方法、標頭和數據(或主體)。

終結點是數據往返于網頁的路由。 它采用 URL 的形式,就像你之前用來查詢數據集的 URL 一樣。

方法是查詢被設計用來執行的基于 HTTP 的操作。 它可以采用 GET、POST、DELETE 或其他關鍵字的形式。 GET 方法通過終結點獲取數據。 POST 方法通過終結點將數據從網頁傳遞到服務器。 DELETE 方法從服務器中刪除資源。

標頭指定完成方法指定的操作類型所需的授權和身份驗證。 它們可能包括有助于對用戶授權的 API 密鑰。

數據包括 API 發送到服務器的對象。 它通常采用 JSON 格式。

也可以按項名稱進行搜索:http://localhost:3000/objects?item=Lise%20with%20a%20Parasol

這種查詢演示了以下兩點:

使用瀏覽器的開發人員工具查看網頁如何發送和接收數據。 可以通過右鍵單擊網頁并選擇“檢查”或選擇“F12”來找到它們。 這些工具可用于 Web 開發的所有領域。 但是,當你使用 REST API 調用時,可以深入到“網絡”選項卡以觀察你構建的 API 的行為方式。 如果刷新瀏覽器,可以看到你在后臺使用 GET 檢索要在瀏覽器中顯示的數據。

在我們的調用中,你通過 URL http://localhost:3000/objects 調用了一個終結點。

使用的方法是 GET。

目前調用中不需要任何標頭。 (稍后將詳細了解標頭。)

返回的數據與存儲在 db.json 文件中的數據相同(由查詢篩選)。

身份驗證策略

大都會博物館的 API 對公眾開放,不需要身份驗證。 唯一的要求是用戶“將請求速率限制為每秒 80 個請求”。這種開放程度對于 API 來說有點罕見。 通常,管理面向公眾的 API 的組織要求某種訪問身份驗證,以防止不必要的終結點過度使用。

如果 API 要求進行身份驗證,則你不能通過 URL 調用直接調用以獲取數據。 需要改用“請求標頭”,它是隨請求一起發送的對象,并且使用 HTTP 調用。

使用 HTTP 協議進行身份驗證

HTTP 協議為開發人員提供若干身份驗證策略,包括“基本身份驗證”和“持有者身份驗證”。 “基本身份驗證”本質上是不安全的,因為它要求直接通過請求標頭傳遞用戶名和密碼。 下面是一個示例:

Authorization: Basic abcdef12345==

“持有者身份驗證”更常見。 “持有者身份驗證”需要在身份驗證調用之前獲取的令牌,該令牌必須在請求標頭中傳遞:

Authorization: Bearer <my-token>

使用 API 密鑰進行身份驗證

API 密鑰在 API 體系結構中很常見。 它們可能在各種位置出現:通過正文數據作為 JSON 傳遞,通過查詢字符串發送或通過自定義標頭或授權標頭發送。

密鑰是在代碼和 API 之間形成握手的一種簡便方法,但是它們本質上是不安全的。 從理論上講,任何人都可以使用密鑰,只要他們可以通過網絡調用攔截密鑰。

提示

最好將 API 密鑰存儲在云中并通過調用環境變量的函數來訪問它們。 但是該方法超出了本教程的范圍!

OAuth

使用 API 密鑰很容易變得復雜,但這是為使用 API 進行身份驗證的最常用方法。 進行身份驗證并使用 API 的另一種方法是通過 OAuth。 OAuth(尤其是版本 2)提供更精細的身份驗證策略。 用戶被定向到 API 的站點,然后完成 OAuth 為啟用訪問所允許的許多流之一。 可能存在多種情況。 但是 OAuth 基本上支持 API 密鑰的創建,并使用密鑰對令牌進行身份驗證,從而支持對有限的操作進行有限的 API 訪問。 這樣,用戶可以在 Web 調用中使用訪問令牌,確保針對特定用途和特定時間段訪問 API 的各個部分。

API 密鑰與訪問令牌的不同之處在于,密鑰提供授權但不提供身份驗證。 訪問令牌提供一種更安全的方法來訪問敏感終結點。

在下一個單元中,你將查詢使用 OAuth 2 的 API:史密森尼博物館的庫珀·休伊特國家設計博物館

查詢大都市API

到目前為止,你已構建可以在本地計算機上使用的 API,以便更好地了解 API 的工作方式。 現在,你將查詢第一個 API,以在真正的第三方 API 中搜索對象:紐約大都會博物館 API。

現代博物館藏品管理的一個奇妙之處在于,目前正在進行的藏品數字化和在線化工作也使業余藝術愛好者可以訪問其數據。 美國的史密森尼博物館、阿姆斯特丹的國立博物館和美國的芝加哥藝術學院等許多博物館都在開放它們的藏品,讓公眾可以通過虛擬方式接觸它們。

研究 API

研究第三方 API 的使用的第一步是查看其文檔。 查看博物館提供的 API 文檔。

要考慮的另一件事是權限。 通讀要使用的所有第三方 API 的使用條款,以確保要執行的操作是可以接受的。 大都會博物館的條款和條件頁面是一個不錯的開始。 因為該博物館采用了知識共享零許可證,所以數據集沒有版權。 該許可證使臨時用戶可以更輕松地使用 API。

你不需要 API 密鑰即可使用此 API,因此可以通過格式標準的 URL 查詢使用 GET 請求來訪問其集合的許多元素。 通過訪問給定的 URL,可以在瀏覽器中使用大都會博物館的 API。 這是使用 API 的最簡單方法。 在后面的單元中,你將了解如何使用代碼調用 API。

查詢 API

大都會博物館的終結點或用于查詢對象的 URL 是多個對象、單個對象、部門和搜索。

此 API 的設計表明,用戶應該搜索集合,然后深入到對象組和各個對象以獲取更多細節和信息。 API 正在逐步構建。 選擇包含部門終結點可能表明數據的構造方式以及用戶搜索數據的方式。

假設你對武器和盔甲感興趣。 可以查詢部門終結點以獲取該部門的 ID:

https://collectionapi.metmuseum.org/public/collection/v1/departments

如果將該鏈接粘貼到瀏覽器中,會發現武器和盔甲部門的部門 ID 為 4。 現在,你已獲得了一些信息,可以用來在集合中找到有趣的項目。 為此,可以使用“搜索”終結點。

由于該 API 嘗試返回可控制的數據量,鑒于 5,000 年藝術史涉及大量藏品,因此僅按照 DepartmentId 進行搜索不會成功。 你需要通過該部門內的關鍵字來縮小搜索范圍。

這種縮小范圍活動要求你在 URL 中使用查詢參數來訪問終結點。 如果查看文檔,你會看到預期的格式是向終結點追加 ?q=keyword(s)。 所以,如果只查找銀制浮雕武器和盔甲物品,請將此字符串粘貼到瀏覽器:https://collectionapi.metmuseum.org/public/collection/v1/search?departmentId=4&q=embossed%20silver。 返回了二十七個項目。

此查詢提供用于檢索返回的對象的信息。 若要查看組中的第一個對象,請轉到以下終結點:https://collectionapi.metmuseum.org/public/collection/v1/objects/626019。 返回的數據顯示 1800 年以來壯觀的盔甲裝束(配有制型紙頭盔)。 可以想象戰時一方穿上它的樣子!

這個服裝頭盔于 1988 年被大都會博物館收購,目前存放在武器和盔甲館。

總結

大都會博物館的 API 有條理且易于訪問,可以作為你構想如何在網站中使用 API 的一個好起點。 可以使用 search 終結點和查詢參數構建搜索。 可以在 department 中查詢一組 objectid,并在其上循環以創建一個有趣對象的列表。 可以深入而詳細地瀏覽該集合,而無需接觸甚至理解其基礎數據庫。 這就是出色的 API 的強大之處!

查詢Cooper Hewitt API

現在,你已經在大都會博物館發現了一些有趣的藏品,下面讓我們看一下另一個博物館 API:Cooper Hewitt API。 庫珀·休伊特國家設計博物館是史密森尼博物館的一部分。 它是美國的國家設計博物館。 從戴森風扇到古董鞋,它的藏品側重于有趣的著名設計。

若要訪問 API,你需要一個訪問令牌,或者同時需要一個訪問令牌和一個充當其驗證器的 API 密鑰。 該 API 允許用戶使用一次性訪問令牌訪問終結點以進行單獨訪問。 但是如果要使用代碼查詢 API,需要兩個元素。

創建令牌和密鑰

請轉到 API 主頁并創建帳戶。 創建帳戶后,可以自行創建密鑰和訪問令牌。 將文本文件中生成的令牌保存在本地計算機上的安全位置。

備注

為什么要同時創建訪問令牌和密鑰? 該 API 使用 OAuth 2,OAuth 2 需要令牌來監視和限制對該 API 的訪問。 API 密鑰與訪問令牌一起使用,以確保你有權以通過令牌設置的方式訪問 API。

創建令牌并使用 API 密鑰對其進行身份驗證之后,可以開始在測試 API 調用的 URL 中發送令牌。 讓我們看看在庫珀·休伊特設計博物館中可以找到什么!

查詢 API

假設你對新藝術風格感興趣,并且想看看那個時代的藏品中存在哪些對象。 通過該 API,可以獲取該時代的 ID,并對其進行查詢以獲取針對該時代指定的藏品的 URL。

備注

對于以下查詢,獲取如前所述的訪問令牌,并將其粘貼到查詢中的指定位置。

若要查找新藝術風格的對象,請按以下方式查詢 API:https://api.collection.cooperhewitt.org/rest/?method=cooperhewitt.periods.getList&access_token=<your-token>&page=1&per_page=100。 該查詢指定需要追加要檢索的頁面以及每頁返回的元素數。

查詢 API 時,響應中將返回一個 URL,其中包含可供精讀的新藝術風格對象列表(包括一些著名的 Mucha 海報):https://collection.cooperhewitt.org/periods/35417231/。 可以看一看。 通過查詢此 API,還能發現其他哪些時代?

處理響應

在許多情況下,了解 RESTful API 發送回的狀態代碼很重要。 如果出現服務器錯誤,該怎么辦? 如果沒有要發送回的數據,該怎么辦? 如果出現身份驗證錯誤,該怎么辦? 如果發生上述任何一種情況,關注代碼都是很有用的,這樣就可以告訴前端用戶存在問題。

嘗試查詢

例如,在瀏覽器中嘗試以下查詢:https://api.collection.cooperhewitt.org/rest/?method=cooperhewitt.periods.getList&access_token=xxxxx&page=1&per_page=100

API 將返回代碼 400:這是一個“錯誤請求”錯誤。 這是 URL 中的訪問令牌無效導致的。

了解狀態代碼

可能遇到的常見訪問代碼包括:

請務必了解狀態代碼,以便可以在客戶端代碼中很好地處理這些代碼。 通常,200 代碼表示“一切正常”,可以繼續顯示查詢結果。 該代碼也可用于對錯誤進行分類并顯示處理錯誤的適當消息。

使用庫

通過瀏覽器的 URL 發送查詢來測試 API(將訪問令牌填充的查詢字符串作為補充)是有用的。 但是在生產應用中,可能需要進行更復雜的 API 調用,將各種數據組合在一起形成查詢。

因此,許多開發人員依賴標準化 API 使用過程的庫。 對于 JavaScript 開發人員來說,Axios 是一個絕佳的選擇。 Python 程序員可能會使用請求。 使用 PowerShell? 嘗試 RestMethod。

使用 URL 進行查詢

假設你對收音機鬧鐘非常熱衷,并且對庫珀·休伊特博物館中設計精良的示例藏品很感興趣。 你可以查看該博物館的 API 文檔。 你會看到,如果想要分頁結果并且結果中僅包含圖像,可以使用這種格式的 API 訪問令牌來構建查詢:

https://api.collection.cooperhewitt.org/rest/?method=cooperhewitt.search.collection&access_token=<your access token>&query=clock%20radio&has_images=true&page=1&per_page=100

出現的第一個示例是 20 世紀 50 年代的以下精巧示例:

通過在本地開發環境中運行以下代碼片段,嘗試使用庫來調用 Cooper Hewitt API:

var axios = require('axios');

var config = {
method: 'get',
url: 'https://api.collection.cooperhewitt.org/rest/?method=cooperhewitt.search.objects&query=clock%20radio&page=1&per_page=100&access_token=yourtoken',
headers: { }
};

axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});

通過使用適合你首選編程語言的庫,可以在基于用戶交互(例如按鈕單擊)編寫函數腳本時,更好地控制如何在代碼中使用 API。

使用方法寫入終結點

類似于這些博物館示例的許多第三方終結點不允許使用 POST 寫入其數據庫。 這些數據庫不是事務性的。 但是你可以練習使用方法來寫入自己的數據。

返回到你之前在本模塊中創建的 db.json 文件。 可以將數據寫入此數據庫。

使用終端,cddb.json 文件的位置,然后輸入 json-server --watch db.json。 服務器將在端口 3000 上啟動。 可以將 GET 用于對象集合 localhost:3000/objects,使用 Postman 對其進行查詢。

可以通過設置標頭值 'content-type': 'application/json' 并通過字符串化的 JSON 對象來寫入此集合:

var axios = require('axios');
var data = JSON.stringify({"id":5,"item":"The Fiancés","artist":"Pierre Auguste Renoir","collection":"Wallraf–Richartz Museum, Cologne, Germany","date":"1868"});

var config = {
method: 'post',
url: 'localhost:3000/objects',
headers: {
'content-type': 'application/json'
},
data : data
};

axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});

可以使用個人數據庫和 API 終結點嘗試其他操作。 嘗試使用你選擇的庫從集合中獲取 (GET)、發布 (POST) 甚至刪除 (DELETE) 項目。

知識檢查

通過FAQ方式讓你對API的訪問以及用途有更加深刻的理解

Q: 是否所有API都需要密鑰才能訪問?
A: 不是所有API都需要密鑰。大多數API確實需要密鑰來訪問,以確保安全性和限制訪問量。然而,有些API是開放的,允許用戶無需密鑰直接訪問。

Q: OAuth如何使用訪問令牌來確保安全性和用戶登錄?
A: OAuth使用訪問令牌來完成以下任務:

Q: API有哪些主要用途?
A: API有多種用途,包括:

總結

在本模塊中,你已了解什么是 API,以及如何構建你自己的 API 并從中檢索數據。 還了解了如何通過博物館 API 發現博物館藏品。 你了解了完全開放的 API 和需要訪問令牌的 API。 最后,你了解了可幫助你訪問和使用 API 的各種庫。

原文鏈接:https://learn.microsoft.com/zh-cn/training/modules/use-apis-discover-museum-art/

上一篇:

REST API 設計:過濾、排序和分頁

下一篇:

為什么要將你的存量API進行分類?
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

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

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

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

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

#AI深度推理大模型API

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

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