---
title: "使用 Alchemy 的 NFT API 中 getNFTs 的 3 个重要理由"
description: "为什么 Alchemy 的 NFT API 是构建 NFT dApp 的最佳选择"
---

# 使用 Alchemy 的 NFT API 中 getNFTs 的 3 个重要理由

如果你正在构建一个 NFT dApp，[Alchemy 的 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 列表及其元数据。

### getNFTs 的示例用例

**getNFTs 是最通用的 NFT API 端点之一，可用于多种 web3 产品，包括用于展示 NFT 的钱包、NFT 交易市场、NFT 分析工具、NFT 稀有度排名网站、Discord 机器人等许多场景。**

例如，当你打开 [OpenSea](https://www.alchemy.com/dapps/opensea) 账户的个人主页时，可以看到自己拥有哪些 NFT。这背后正是通过一个使用 getNFTs 的端点来返回你钱包地址所拥有的 NFT 及相关元数据。

更广泛地说，getNFTs 可以用于任何需要知道用户拥有什么的场景。例如，getNFTs 请求可以为 NFT 分析工具（如稀有度排名网站）或 Discord 机器人提供数据支持，让用户知道刚刚哪个 NFT 被出售、在哪个市场出售，以及其他相关元数据。

## 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 可以帮你确定这份白名单。

同样，如果你使用某个 NFT 作为头像，想验证其所有权，也可以用这个 API 来检查所有权是否发生了变化。

如果没有 getOwnersForToken，这些用例都没有便捷的解决方案，因为开发者需要解析整条区块链，才能弄清楚某个 NFT 的所有权是如何随时间变化的。而现在，借助 Alchemy 的 NFT API，getOwnersForToken 只需一次请求即可完成这项任务。

## 使用 Alchemy 的 NFT API 获取 NFT 的 3 个理由

在获取 NFT 方面，[使用 Alchemy 的 NFT API 构建](https://www.alchemy.com/docs/reference/nft-api-quickstart) 是最佳选择，原因在于其覆盖范围、垃圾数据过滤和图片缓存能力。

### 1. NFT 覆盖范围

**Alchemy 的 NFT API 拥有最广泛的 NFT 覆盖范围。这本身是一项挑战，因为 NFT 元数据可能存在于链上、链下，并且格式不一致，这导致在准确记录元数据时会遇到大量边界情况。**

NFT 元数据存在于多种不同的格式和多种不同的环境中，这使得准确确定 NFT 元数据成为一个棘手的问题。

Alchemy 之所以能够提供最全面的 NFT 覆盖，是因为设计了多条代码路径来应对大量常见情况，包括但不限于处理以下格式的元数据：

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

Alchemy 的 NFT API 还能处理 SVG、使用 Pinata 等 IPFS 网关的 NFT、指向图片所在链下位置的 URI、以 base64 编码的图片，以及其他多种实现方式。

#### 我们如何获取 NFT 元数据？

**获取 NFT 元数据是一个复杂的、存在诸多变化的过程，但 Alchemy 的 NFT API 提供了一种简单的解决方案，让你无需为每种用例单独耗费宝贵时间去思考。**

要获取一个 NFT 的元数据，我们首先需要一个 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 dashboard 实际操作"
  description="30 分钟引导演示：现场演示 dashboard 中的每个工具。"
  ctaHref="/resources/dashboard-demo"
  thumbnail={{
    src: "https://media.alchemy.com/alchemy-dashboard-demo-thumbnail.png",
    alt: "Alchemy Dashboard Demo",
  }}
/>


一个真正符合 ERC-721 标准的合约应当提供一套方案，包含 NFT 的名称、属性（包括 name、description 和 image），并支持一些额外的方法。

理论上，你应该可以通过一次 support interface 调用来判断某个 NFT 是否支持该标准，合约会给出相应的回答。

由于这些合约是可编程的，开发者可能会有意或无意地将合约编写成给出错误的响应，这意味着我们还需要查看合约的其他属性，以确认它是否真的支持该接口。

一旦确定某个智能合约确实是一个 NFT，你就可以向该合约或代币询问 _元数据的位置_。对于 ERC721 合约，你调用的方法是 **token URI** 方法；而对于 1155 合约，这个方法则直接称为 **URI** 方法。

这个 URI 指向互联网上或链上存放 NFT 元数据的位置。有些合约在被问及该位置时会指向一个文件，而另一些则会错误地直接在 token URI 中提供元数据。

如果 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 的 NFT API 如何帮助你构建下一个 NFT 项目，或者进一步了解 Alchemy 如何助力你的 web3 之旅。
