"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"}
]
}

這個(gè) JSON 文件是數(shù)據(jù)庫的模擬版本。 可以使用 json-server 來查詢此數(shù)據(jù)。

查詢數(shù)據(jù)庫

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

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

嘗試使用 URL 查詢此數(shù)據(jù)集:http://localhost:3000/objects/1 將顯示 ID 為 1 的項(xiàng)目。

了解 REST API 調(diào)用

你可能已經(jīng)注意到,API 調(diào)用由幾部分組成。 REST API 調(diào)用的四個(gè)主要部分是終結(jié)點(diǎn)、方法、標(biāo)頭和數(shù)據(jù)(或主體)。

終結(jié)點(diǎn)是數(shù)據(jù)往返于網(wǎng)頁的路由。 它采用 URL 的形式,就像你之前用來查詢數(shù)據(jù)集的 URL 一樣。

方法是查詢被設(shè)計(jì)用來執(zhí)行的基于 HTTP 的操作。 它可以采用 GET、POST、DELETE 或其他關(guān)鍵字的形式。 GET 方法通過終結(jié)點(diǎn)獲取數(shù)據(jù)。 POST 方法通過終結(jié)點(diǎn)將數(shù)據(jù)從網(wǎng)頁傳遞到服務(wù)器。 DELETE 方法從服務(wù)器中刪除資源。

標(biāo)頭指定完成方法指定的操作類型所需的授權(quán)和身份驗(yàn)證。 它們可能包括有助于對(duì)用戶授權(quán)的 API 密鑰。

數(shù)據(jù)包括 API 發(fā)送到服務(wù)器的對(duì)象。 它通常采用 JSON 格式。

也可以按項(xiàng)名稱進(jìn)行搜索:http://localhost:3000/objects?item=Lise%20with%20a%20Parasol

這種查詢演示了以下兩點(diǎn):

使用瀏覽器的開發(fā)人員工具查看網(wǎng)頁如何發(fā)送和接收數(shù)據(jù)。 可以通過右鍵單擊網(wǎng)頁并選擇“檢查”或選擇“F12”來找到它們。 這些工具可用于 Web 開發(fā)的所有領(lǐng)域。 但是,當(dāng)你使用 REST API 調(diào)用時(shí),可以深入到“網(wǎng)絡(luò)”選項(xiàng)卡以觀察你構(gòu)建的 API 的行為方式。 如果刷新瀏覽器,可以看到你在后臺(tái)使用 GET 檢索要在瀏覽器中顯示的數(shù)據(jù)。

在我們的調(diào)用中,你通過 URL http://localhost:3000/objects 調(diào)用了一個(gè)終結(jié)點(diǎn)。

使用的方法是 GET。

目前調(diào)用中不需要任何標(biāo)頭。 (稍后將詳細(xì)了解標(biāo)頭。)

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

身份驗(yàn)證策略

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

如果 API 要求進(jìn)行身份驗(yàn)證,則你不能通過 URL 調(diào)用直接調(diào)用以獲取數(shù)據(jù)。 需要改用“請(qǐng)求標(biāo)頭”,它是隨請(qǐng)求一起發(fā)送的對(duì)象,并且使用 HTTP 調(diào)用。

使用 HTTP 協(xié)議進(jìn)行身份驗(yàn)證

HTTP 協(xié)議為開發(fā)人員提供若干身份驗(yàn)證策略,包括“基本身份驗(yàn)證”和“持有者身份驗(yàn)證”。 “基本身份驗(yàn)證”本質(zhì)上是不安全的,因?yàn)樗笾苯油ㄟ^請(qǐng)求標(biāo)頭傳遞用戶名和密碼。 下面是一個(gè)示例:

Authorization: Basic abcdef12345==

“持有者身份驗(yàn)證”更常見。 “持有者身份驗(yàn)證”需要在身份驗(yàn)證調(diào)用之前獲取的令牌,該令牌必須在請(qǐng)求標(biāo)頭中傳遞:

Authorization: Bearer <my-token>

使用 API 密鑰進(jìn)行身份驗(yàn)證

API 密鑰在 API 體系結(jié)構(gòu)中很常見。 它們可能在各種位置出現(xiàn):通過正文數(shù)據(jù)作為 JSON 傳遞,通過查詢字符串發(fā)送或通過自定義標(biāo)頭或授權(quán)標(biāo)頭發(fā)送。

密鑰是在代碼和 API 之間形成握手的一種簡(jiǎn)便方法,但是它們本質(zhì)上是不安全的。 從理論上講,任何人都可以使用密鑰,只要他們可以通過網(wǎng)絡(luò)調(diào)用攔截密鑰。

提示

最好將 API 密鑰存儲(chǔ)在云中并通過調(diào)用環(huán)境變量的函數(shù)來訪問它們。 但是該方法超出了本教程的范圍!

OAuth

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

API 密鑰與訪問令牌的不同之處在于,密鑰提供授權(quán)但不提供身份驗(yàn)證。 訪問令牌提供一種更安全的方法來訪問敏感終結(jié)點(diǎn)。

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

查詢大都市API

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

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

研究 API

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

要考慮的另一件事是權(quán)限。 通讀要使用的所有第三方 API 的使用條款,以確保要執(zhí)行的操作是可以接受的。 大都會(huì)博物館的條款和條件頁面是一個(gè)不錯(cuò)的開始。 因?yàn)樵摬┪镳^采用了知識(shí)共享零許可證,所以數(shù)據(jù)集沒有版權(quán)。 該許可證使臨時(shí)用戶可以更輕松地使用 API。

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

查詢 API

大都會(huì)博物館的終結(jié)點(diǎn)或用于查詢對(duì)象的 URL 是多個(gè)對(duì)象、單個(gè)對(duì)象、部門和搜索。

此 API 的設(shè)計(jì)表明,用戶應(yīng)該搜索集合,然后深入到對(duì)象組和各個(gè)對(duì)象以獲取更多細(xì)節(jié)和信息。 API 正在逐步構(gòu)建。 選擇包含部門終結(jié)點(diǎn)可能表明數(shù)據(jù)的構(gòu)造方式以及用戶搜索數(shù)據(jù)的方式。

假設(shè)你對(duì)武器和盔甲感興趣。 可以查詢部門終結(jié)點(diǎn)以獲取該部門的 ID:

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

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

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

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

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

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

總結(jié)

大都會(huì)博物館的 API 有條理且易于訪問,可以作為你構(gòu)想如何在網(wǎng)站中使用 API 的一個(gè)好起點(diǎn)。 可以使用 search 終結(jié)點(diǎn)和查詢參數(shù)構(gòu)建搜索。 可以在 department 中查詢一組 objectid,并在其上循環(huán)以創(chuàng)建一個(gè)有趣對(duì)象的列表。 可以深入而詳細(xì)地瀏覽該集合,而無需接觸甚至理解其基礎(chǔ)數(shù)據(jù)庫。 這就是出色的 API 的強(qiáng)大之處!

查詢Cooper Hewitt API

現(xiàn)在,你已經(jīng)在大都會(huì)博物館發(fā)現(xiàn)了一些有趣的藏品,下面讓我們看一下另一個(gè)博物館 API:Cooper Hewitt API。 庫珀·休伊特國家設(shè)計(jì)博物館是史密森尼博物館的一部分。 它是美國的國家設(shè)計(jì)博物館。 從戴森風(fēng)扇到古董鞋,它的藏品側(cè)重于有趣的著名設(shè)計(jì)。

若要訪問 API,你需要一個(gè)訪問令牌,或者同時(shí)需要一個(gè)訪問令牌和一個(gè)充當(dāng)其驗(yàn)證器的 API 密鑰。 該 API 允許用戶使用一次性訪問令牌訪問終結(jié)點(diǎn)以進(jìn)行單獨(dú)訪問。 但是如果要使用代碼查詢 API,需要兩個(gè)元素。

創(chuàng)建令牌和密鑰

請(qǐng)轉(zhuǎn)到 API 主頁并創(chuàng)建帳戶。 創(chuàng)建帳戶后,可以自行創(chuàng)建密鑰和訪問令牌。 將文本文件中生成的令牌保存在本地計(jì)算機(jī)上的安全位置。

備注

為什么要同時(shí)創(chuàng)建訪問令牌和密鑰? 該 API 使用 OAuth 2,OAuth 2 需要令牌來監(jiān)視和限制對(duì)該 API 的訪問。 API 密鑰與訪問令牌一起使用,以確保你有權(quán)以通過令牌設(shè)置的方式訪問 API。

創(chuàng)建令牌并使用 API 密鑰對(duì)其進(jìn)行身份驗(yàn)證之后,可以開始在測(cè)試 API 調(diào)用的 URL 中發(fā)送令牌。 讓我們看看在庫珀·休伊特設(shè)計(jì)博物館中可以找到什么!

查詢 API

假設(shè)你對(duì)新藝術(shù)風(fēng)格感興趣,并且想看看那個(gè)時(shí)代的藏品中存在哪些對(duì)象。 通過該 API,可以獲取該時(shí)代的 ID,并對(duì)其進(jìn)行查詢以獲取針對(duì)該時(shí)代指定的藏品的 URL。

備注

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

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

查詢 API 時(shí),響應(yīng)中將返回一個(gè) URL,其中包含可供精讀的新藝術(shù)風(fēng)格對(duì)象列表(包括一些著名的 Mucha 海報(bào)):https://collection.cooperhewitt.org/periods/35417231/。 可以看一看。 通過查詢此 API,還能發(fā)現(xiàn)其他哪些時(shí)代?

處理響應(yīng)

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

嘗試查詢

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

API 將返回代碼 400:這是一個(gè)“錯(cuò)誤請(qǐng)求”錯(cuò)誤。 這是 URL 中的訪問令牌無效導(dǎo)致的。

了解狀態(tài)代碼

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

請(qǐng)務(wù)必了解狀態(tài)代碼,以便可以在客戶端代碼中很好地處理這些代碼。 通常,200 代碼表示“一切正常”,可以繼續(xù)顯示查詢結(jié)果。 該代碼也可用于對(duì)錯(cuò)誤進(jìn)行分類并顯示處理錯(cuò)誤的適當(dāng)消息。

使用庫

通過瀏覽器的 URL 發(fā)送查詢來測(cè)試 API(將訪問令牌填充的查詢字符串作為補(bǔ)充)是有用的。 但是在生產(chǎn)應(yīng)用中,可能需要進(jìn)行更復(fù)雜的 API 調(diào)用,將各種數(shù)據(jù)組合在一起形成查詢。

因此,許多開發(fā)人員依賴標(biāo)準(zhǔn)化 API 使用過程的庫。 對(duì)于 JavaScript 開發(fā)人員來說,Axios 是一個(gè)絕佳的選擇。 Python 程序員可能會(huì)使用請(qǐng)求。 使用 PowerShell? 嘗試 RestMethod。

使用 URL 進(jìn)行查詢

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

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

出現(xiàn)的第一個(gè)示例是 20 世紀(jì) 50 年代的以下精巧示例:

通過在本地開發(fā)環(huán)境中運(yùn)行以下代碼片段,嘗試使用庫來調(diào)用 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);
});

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

使用方法寫入終結(jié)點(diǎn)

類似于這些博物館示例的許多第三方終結(jié)點(diǎn)不允許使用 POST 寫入其數(shù)據(jù)庫。 這些數(shù)據(jù)庫不是事務(wù)性的。 但是你可以練習(xí)使用方法來寫入自己的數(shù)據(jù)。

返回到你之前在本模塊中創(chuàng)建的 db.json 文件。 可以將數(shù)據(jù)寫入此數(shù)據(jù)庫。

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

可以通過設(shè)置標(biāo)頭值 'content-type': 'application/json' 并通過字符串化的 JSON 對(duì)象來寫入此集合:

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);
});

可以使用個(gè)人數(shù)據(jù)庫和 API 終結(jié)點(diǎn)嘗試其他操作。 嘗試使用你選擇的庫從集合中獲取 (GET)、發(fā)布 (POST) 甚至刪除 (DELETE) 項(xiàng)目。

知識(shí)檢查

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

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

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

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

總結(jié)

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

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

上一篇:

REST API 設(shè)計(jì):過濾、排序和分頁

下一篇:

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

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

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

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

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

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

#AI深度推理大模型API

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

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