想快速拉取链上所有 DeFi protocol 的精简信息?或者只想聚焦某个 platformId 的「投资产品」入口地址?本文用一篇彻底拆解官方提供的 query protocol list 接口,帮你 3 分钟搞懂 Request 怎么写、Response 如何读、高阶场景如何二次封装。
一、接口定位与核心关键词
核心关键词:DeFi API、协议列表、Web3 接口、投资产品、链上协议、WaaS、RESTful、JSON 返回
二、请求地址(Request URL)
只需用 GET 方法访问:
https://web3.okx.com/api/v5/defi/explore/protocol/list接口默认返回 全部协议,如加参数即可过滤单个平台。
三、请求参数(Request Parameters)
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
platformId | String | 否 | 平台唯一标识,传值后仅列出该平台协议 |
platformName | String | 否 | 平台正式名称,与 platformId 二选一即可 |
若两者皆为空,API 会一次性返回所有协议,方便做 冷启动缓存 或 全量对比脚本。
四、响应结构(Response Parameters)
一条协议在 JSON 中表现为对象字段,层级如下:
platformId— 平台 IDplatformName— 平台中文或英文名platformWebSite— 官方网址investmentApiUrlPattern— 在 后端 拉投资产品详情的 ReST 模板,不含 UI,适合写脚本investmentPageUrlPattern— 在 OKX 官网 UI 打开的浏览器地址,适合前端跳转platformMinInfos— 产品级数组每一项再细分:
investmentId产品 IDprotocolId隶属的协议 IDnetwork所属主网,如 Ethereum、ArbitrumchainId链 ID,数值型,可与 EIP-155 对齐
示例路由器径示范:
platformMinInfos[0].chainId == 42161 // Arbitrum One五、完整 cURL 调用示例
不带过滤:
curl -X GET "https://web3.okx.com/api/v5/defi/explore/protocol/list"带 Platform 名称过滤:
curl -X GET "https://web3.okx.com/api/v5/defi/explore/protocol/list?platformName=AAVE"六、高阶用法:从列表到产品详情
- 步骤 1:先用本文接口抓到所有
protocol与investmentId - 步骤 2:使用返回字段
investmentApiUrlPattern,把{{investmentId}}模板替换成真实 ID - 步骤 3:得到完整产品详情路径,再组合私钥做签名调用,即可完成 收益复投(auto-compound)
七、速率与缓存建议
- 并发限制:官方限速 120 req/min/IP,建议使用 Redis 本地缓存 30 秒
- 字段去重:将
platformId+investmentId设为联合键,避免产品分叉后重复入库
八、错误码速查
| 返回码 | 含义 | 解决思路 |
|---|---|---|
| 40001 | 参数格式异常 | 检查 platformName 是否 UTF-8 |
| 429 | 触发速率限制 | 增加退避时间或申请企业链路 |
| 500 | 服务内部错误 | 捕获异常 3 s 后重试一次 |
九、常见问题 FAQ
Q1:平台没有 platformWebSite 字段怎么办?
A1:该值可能为空,建议接管兜底跳转至 https://etherscan.io/address/{protocolId} 方便人工核查。
Q2:如何仅获取 Arbitrum 网络的产品?
A2:列表接口本身不做链级过滤,拿到全部数据后在本地过滤 chainId==42161 即可。
Q3:有 GraphQL 版本吗?
A3:官方暂无 GQL 封装,可用 REST 拉取后自行转换为 GraphQL 子图,降低前端 bundle 体积。
Q4:返回里出现同名 protocol,是 BUG 吗?
A4:不是。多数协议会部署多链 Factory,同名但 chainId 与 protocolId 不同,可作为双重区分维度。
Q5:为何我 platformName=Uniswap 查不到?
A5:注意大小写与空格;官方使用「Uniswap V3」完整写法,建议先用模糊匹配列表,再精准过滤。
Q6:浏览器打不开 investmentPageUrlPattern?
A6:该模板需替换域内变量,例:https://okxdog.com/web3/defi/invest/{investmentId},如缺失,请确认是否完成模板拼接。
十、开发时的 3 个避坑小贴士
- 在使用
investmentPageUrlPattern做前端跳转时,务必 URL EncodeinvestmentId,以免遇到特殊字符(如+、%)导致 404。 - 全局缓存切勿持久化到本地文件,链上数据每天滚动更新,推荐 Redis TTL 5 分钟。
- 若部署在云函数,请启用 Keep-alive 减少 HTTPS 握手时间 —— 实测节省 180 ms。