---
title: "使用 Alchemy 的 NFT API 執行 getNFTs 的 3 個重要理由"
description: "為什麼 Alchemy 的 NFT API 是打造 NFT dApp 的最佳選擇"
---

# 使用 Alchemy 的 NFT API 執行 getNFTs 的 3 個重要理由

如果你正在打造 NFT dApp，[Alchemy's NFT API](https://www.alchemy.com/nft-api?a=cf7d4f9793) 可以透過 getNFTs、getOwnersForToken 等 get 請求，協助你為使用者打造更好的體驗。讓我們來看看這些方法的作用，以及為什麼我們應該在 NFT 建置中使用它們。

## 什麼是 getNFTs？

[**getNFTs**](https://www.alchemy.com/docs/reference/nft-api-endpoints/nft-api-endpoints/nft-api-v-2-methods-older-version/get-nf-ts) 是一個 NFT API 端點，讓開發者能取得屬於特定擁有者地址的所有 NFT 清單，包括 ERC-721 與 ERC-1155 代幣。你可以輸入擁有者地址或 ENS 名稱，API 會回傳該地址所擁有的所有 NFT 清單，以及對應的 NFT metadata。

### getNFTs 的範例使用情境

**getNFTs 是最多功能的 NFT API 端點之一，可用於各種 web3 產品，包括用來顯示 NFT 的錢包、NFT 市集、NFT 分析工具、NFT 稀有度排名網站、Discord 機器人，以及其他許多使用情境。**

舉例來說，如果你造訪 [OpenSea](https://www.alchemy.com/dapps/opensea) 帳號的個人頁面，就能看到自己擁有哪些 NFT。這是透過一個使用 getNFTs 的端點來實現的，它會回傳你的錢包地址所擁有的 NFT，以及相關的 NFT metadata。

更廣泛來說，只要你需要知道使用者擁有什麼，getNFTs 都能派上用場。舉例來說，getNFTs 請求可以為 NFT 分析工具（如稀有度排名網站）或 Discord 機器人提供動力，透過拉取資料讓你知道剛售出的是哪個 NFT、在哪個市集售出，以及其他相關的 metadata。

## 什麼是 getOwnersForToken？

[**getOwnersForToken**](https://www.alchemy.com/docs/reference/nft-api-endpoints/nft-api-endpoints/nft-api-v-2-methods-older-version/get-owners-for-token) 是一個 API，讓你能指定一個 NFT 智能合約，並回傳該代幣的所有擁有者清單。對於 ERC-721 代幣，getOwnersForToken 只會回傳單一擁有者，但對於可以有多個擁有者的 ERC-1155 代幣，getOwnersForToken 可以回傳多個錢包地址。

### getOwnersForToken 的範例使用情境

getOwnersForToken 有多種使用情境，包括空投、NFT 擁有權變更時的快取更新，以及頭像驗證。

如果你正在進行 NFT 鑄造專案，並想要對特定代幣的擁有者進行空投，getOwnersForToken 可以幫你找出這份白名單。

同樣地，如果你有一張頭像圖片並想驗證擁有權，你可以使用這個 API 來檢查擁有權是否已經變更。

沒有 getOwnersforToken，這些使用情境就沒有便利的解決方案，因為開發者必須解析整條區塊鏈，才能得知單一 NFT 的擁有權隨時間如何變化。現在有了 Alchemy's NFT API，getOwnersForToken API 只需一次請求就能完成這項工作。

## 使用 Alchemy's NFT API 取得 NFT 的 3 個理由

[以 Alchemy's NFT API 建置](https://www.alchemy.com/docs/reference/nft-api-quickstart)是取得 NFT 的最佳選擇，原因在於其涵蓋範圍、垃圾過濾機制，以及圖片快取功能。

### 1. NFT 涵蓋範圍

**Alchemy's NFT API 擁有最廣泛的 NFT 涵蓋範圍，這是一項挑戰，因為 NFT metadata 存在於鏈上、鏈下，且格式並不一致，導致在準確記錄 metadata 時會出現大量邊界案例。**

NFT metadata 存在於多種不同格式、多種不同環境中，這使得判定 NFT 的準確 metadata 成為一個棘手的問題。

Alchemy 能提供最完整的 NFT 涵蓋範圍，是因為設計了多條程式碼路徑來應對許多最常見的情況，包括但不限於處理以下格式的 metadata：

- 鏈上或鏈下的 JSON 格式
- 鏈上或鏈下的 SVG 格式
- 鏈上或鏈下的 UTF-8 格式

Alchemy's NFT API 也能處理 SVG、使用像 Pinata 這類 IPFS gateway 的 NFT、指向次要鏈下位置圖片的 URI、以 base 64 編碼的圖片，以及許多其他實作方式。

#### 我們如何取得 NFT metadata？

**取得 NFT metadata 是一個複雜且有許多變化的過程，但 Alchemy's NFT API 提供了簡單的解決方案，讓你不需要花費寶貴的時間逐一思考每種使用情境。**

要取得 NFT 的 metadata，我們從一個 ID 開始，這個 ID 由合約地址與代幣 ID 組成，兩者共同構成該 NFT 的唯一識別碼。

系統會檢查這個 ID 是否已存在於 Alchemy NFT 快取中。如果不在快取中，我們就需要進一步判斷這是哪種類型的 NFT，以及該合約符合哪個標準。

Alchemy 目前支援兩大主要 NFT 標準：[ERC-721 與 ERC-1155](https://www.alchemy.com/blog/comparing-erc-721-to-erc-1155) 智能合約。

<VideoCta
  title="看看 Alchemy 儀表板實際運作"
  description="30 分鐘導覽：儀表板中的每項工具，現場示範。"
  ctaHref="/resources/dashboard-demo"
  thumbnail={{
    src: "https://media.alchemy.com/alchemy-dashboard-demo-thumbnail.png",
    alt: "Alchemy Dashboard Demo",
  }}
/>


一個真正符合 ERC-721 標準的合約，應該要提供一個包含 NFT 標題與屬性（包括名稱、描述、圖片）的方案，並能支援一些額外的方法。

理論上，你應該能透過 support interface 呼叫來判斷某個 NFT 是否支援此標準，該合約會回應相應的答案。

由於這些合約是可程式化的，開發者可能出於故意或失誤，將合約設定為回應錯誤的答案，這代表我們需要檢視合約的其他屬性，以確保它確實支援該介面。

一旦你確認某個智能合約確實是 NFT，就可以向該合約或代幣詢問 _metadata 的所在位置_。對於 ERC721 合約，你要呼叫的方法是 **token URI** 方法，而對於 1155 合約，這個方法則單純稱為 **URI** 方法。

URI 會指向網路上或鏈上某個存放 NFT metadata 的位置。有些合約在被詢問這個位置時，會指向一個檔案，而有些則錯誤地直接在 token URI 中提供 metadata。

如果 URI 指向另一個位置，我們就需要追蹤該連結，通常會連到第三方網站或伺服器，而這本身就伴隨著一連串問題。這些網站可能故障、含有惡意內容，或有速率限制，但 Alchemy 能排除這些障礙，乾淨俐落地回傳資訊。

由於 ERC-721 與 ERC-1155 智能合約有著眾多不同的實作方式，維持廣泛且[準確的資料涵蓋範圍](https://www.alchemy.com/blog/data-accuracy)一直是個持續存在的挑戰。使用 Alchemy NFT API 是確保已知 NFT 獲得最大涵蓋範圍的最佳方式。

### 2. NFT 垃圾過濾機制

Alchemy 為 getNFTs 提供的垃圾過濾機制，透過過濾掉[**垃圾 NFT**](https://www.alchemy.com/overviews/spam-nfts)（未經請求的空投，或違反 ERC-721 與 ERC-1155 標準的 NFT 智能合約），讓建置工作變得更加輕鬆。

除了 getNFTs 內建的過濾選項之外，Alchemy 新推出的 **getSpamContracts** 會回傳所選鏈上所有被列為垃圾的 ERC-721 與 ERC-1155 合約清單。

同樣地，**isSpamForContract** 會檢查特定 NFT 智能合約是否已被歸類為垃圾。你可以依合約地址進行過濾，這代表你也能查看某個特定 NFT 的擁有者，並檢查那是否是他們唯一擁有的 NFT。

Alchemy 是唯一提供 NFT 垃圾過濾機制的平台，如果被垃圾內容淹沒，要投入 NFT 相關工作將會非常困難。

### 3. NFT 圖片快取

**Alchemy 的圖片快取機制能讓 NFT 圖片的回應更快、載入時間更短。** 雖然 NFT 媒體傳統上是由 IPFS、[去中心化儲存供應商](https://www.alchemy.com/overviews/a-primer-on-decentralized-storage-networks)或第三方伺服器提供服務，但開發者在使用這些端點時，經常會遇到載入緩慢與逾時錯誤的問題。Alchemy 透過 Cloudinary 快取 NFT 圖片，並從自家快取提供 NFT URL，解決了這個問題，讓資料擷取速度更快。

## 我該選擇哪個 NFT API？

**由於 Alchemy 提供強大的端點，包括垃圾過濾機制、getFloorPrice 與 reingestContract，加上最佳的 NFT 涵蓋範圍（包括支援 Crypto Punks），以及最準確的資料，Alchemy NFT API 是 web3 開發者的最佳選擇。**

[註冊 Alchemy 帳號](https://www.alchemy.com/enhanced-apis?a=cf7d4f9793)，看看 Alchemy's NFT API 如何協助你打造下一個 NFT 專案，或進一步了解 Alchemy 如何協助你在 web3 領域的旅程。
