摘要
以太坊 API 包括标准的 JSON-RPC 方法(eth_*)、用于共识数据的 Beacon REST API,以及客户端内部使用的 Engine API。像 Etherscan 或 Alchemy 这样的特定于提供商的端点不是标准的以太坊 API。本指南帮助您识别什么算作以太坊 API,以及如何可靠地连接。
快速解答:什么算作以太坊 API?
当有人问“哪些是以太坊 API?”时,答案取决于您是指以太坊协议定义的标准接口,还是基础设施提供商添加的额外端点。核心的以太坊 API 包括:
- 执行层 JSON-RPC(
eth_*方法)——用于读取状态、发送交易以及与智能合约交互。 - Beacon REST API——暴露共识层数据,如时隙、验证者和最终性。
- Engine API——执行客户端和共识客户端之间的内部接口,不供外部使用。
像 Etherscan 的 ?module=account&action=balance 或 Alchemy 的 alchemy_getAssetTransfers 这样的特定于提供商的端点,在协议意义上不是以太坊 API。它们是构建在区块链之上的便利服务。理解这一区别有助于您为应用程序选择正确的接口,并避免供应商锁定。
决策指南:您应该使用哪个 API?
在编写任何代码之前,决定哪个 API 层符合您的用例。使用此表评估您的选项:
| 用例 | 推荐 API | 原因 |
|---|---|---|
| 读取余额、发送交易、调用合约 | 执行层 JSON-RPC | 所有客户端和提供商支持的标准接口 |
| 查询验证者活动、最终性或信标链数据 | Beacon REST API | 提供 eth_* 无法获得的共识层数据 |
| 实时更新(新区块、待处理交易) | WebSocket JSON-RPC | 支持 eth_subscribe 等订阅 |
| 超出默认修剪的历史状态或日志 | 归档节点 JSON-RPC | 需要 eth_getBalance 在旧区块或 eth_getLogs 在长时间范围内 |
| 特定于提供商的功能(代币余额、NFT 元数据) | 提供商 API(例如 Etherscan、Alchemy) | 不是标准的,但可以节省开发时间 |
对于大多数 dApp,您将从通过 HTTPS 的执行层 JSON-RPC 开始。如果您需要实时数据,请添加 WebSocket 连接。如果您正在构建分析或区块浏览器,您可能需要归档访问,可能还需要 Beacon REST API。
什么是以太坊 JSON-RPC API?
以太坊 JSON-RPC API 是一组允许客户端与以太坊网络交互的方法。它遵循 JSON-RPC 2.0 规范,并由所有主要的执行客户端(Geth、Nethermind、Besu、Erigon)实现。方法分为三类:
- Gossip 方法:
eth_sendRawTransaction、eth_sendTransaction——向网络广播交易。 - 状态方法:
eth_getBalance、eth_call、eth_getStorageAt——读取当前状态。 - 历史方法:
eth_getBlockByNumber、eth_getTransactionReceipt、eth_getLogs——查询历史数据。
以下是一个简单的 curl 示例,用于获取最新区块号:
curl -X POST https://eth-mainnet.rpc.onfinality.io \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
Beacon REST API:共识数据
合并之后,以太坊有两个层:执行层和共识层。Beacon REST API 暴露共识层数据,例如:
GET /eth/v1/beacon/genesis– 创世信息GET /eth/v1/beacon/states/{state_id}/validators– 验证者集合GET /eth/v1/beacon/blocks/{block_id}– 信标区块详情
此 API 对于质押仪表板、验证者监控以及需要最终性信息的应用程序很有用。它不是 JSON-RPC 的替代品;它是对其的补充。
Engine API:内部通信
Engine API 是执行客户端和共识客户端之间的 JSON-RPC 接口。它处理区块验证和负载执行。它不适用于外部开发人员,并且很少公开暴露。如果您看到标记为“Engine API”的端点,它可能用于内部节点操作,而不是用于 dApp 开发。
特定于提供商的 API:不是标准的以太坊
像 Etherscan、Alchemy 和 Infura 这样的服务提供它们自己的 API,超出了标准 JSON-RPC。例如:
- Etherscan API:
https://api.etherscan.io/api?module=account&action=balance&address=0x...– 返回余额、交易历史和合约 ABI。 - Alchemy NFT API:
alchemy_getNFTMetadata– 获取 NFT 数据。 - Infura IPFS API:不是以太坊特定的,但一并提供。
这些不是以太坊 API。它们是专有扩展,可能很方便,但它们引入了对特定提供商的依赖。如果您基于它们构建,迁移到另一个提供商可能需要更改代码。
如何连接:使用库和端点
大多数开发人员使用 ethers.js 或 viem 等库,而不是原始 curl。以下是一个使用 viem 的示例:
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({
chain: mainnet,
transport: http('https://eth-mainnet.rpc.onfinality.io'),
});
const blockNumber = await client.getBlockNumber();
console.log('Current block number:', blockNumber);
在选择 RPC 提供商时,请考虑:
- 方法支持:它是否支持
eth_getLogs、eth_call和归档方法? - 速率限制:每秒请求数和每日上限是多少?
- WebSocket 支持:实时订阅需要。
- 冗余:提供商是否使用负载均衡的节点?
OnFinality 为以太坊和许多其他网络提供公共和专用 RPC 端点。查看我们的 RPC 定价 和 支持的网络 了解详情。
常见陷阱及如何避免
- 使用特定于提供商的方法而没有回退:如果您依赖
alchemy_getAssetTransfers,切换提供商时您的应用会中断。尽可能坚持使用标准方法。 - 忽略区块参数:
eth_getBalance需要区块参数。使用"latest"可能无法提供历史数据;使用"earliest"或特定的区块号。 - 假设所有提供商都支持归档数据:并非所有提供商都支持。如果您需要历史状态,请验证归档支持。
- 忘记用于实时的 WebSocket:HTTP 是请求-响应;WebSocket 允许订阅。使用
eth_subscribe订阅待处理交易。
关键要点
- 标准的以太坊 API 是执行层 JSON-RPC、Beacon REST 和 Engine API。
- 特定于提供商的 API 不是以太坊 API;它们是专有扩展。
- 根据您的用例选择 API:状态、历史、实时或共识数据。
- 使用 viem 或 ethers.js 等库来简化开发。
- 评估 RPC 提供商的方法支持、速率限制、WebSocket 和归档数据。
常见问题解答
Etherscan API 是以太坊 API 吗?
不是,Etherscan API 是一个专有 API,提供来自以太坊区块链的数据。它不是标准以太坊 API 集的一部分。
JSON-RPC 和 REST API 有什么区别?
JSON-RPC 是一种使用 JSON 进行远程过程调用的协议,通常通过 HTTP 或 WebSocket。REST 是一种架构风格。以太坊的标准 API 是 JSON-RPC,而不是 REST。
我可以将 WebSocket 用于以太坊 API 吗?
可以,许多提供商提供用于实时订阅的 WebSocket 端点。使用 eth_subscribe 监听新区块或待处理交易。
我需要 API 密钥才能使用以太坊 API 吗?
公共端点可能不需要密钥,但对于生产环境,您需要具有 API 密钥的托管服务,以获得更高的速率限制和可靠性。
什么是归档节点?
归档节点存储完整的状态历史,允许在任何过去的区块进行查询。对于分析和历史数据是必要的。
后续步骤
既然您知道哪些 API 是以太坊 API,您就可以开始构建了。如果您需要可靠的 RPC 提供商,请探索 OnFinality 的 API 服务,或考虑使用 专用节点 用于高吞吐量应用程序。有关更广泛的视图,请参阅我们的 选择 RPC 提供商指南。