概述
读者可前往我的博客获得更好的阅读体验。
本文主要介绍如何通过免费且高效的的基于GraphQL的basement进行部分链上数据分析实战。本文不要求读者具有GraphQL
相关经验,但要求读者会使用Python
中的Pandas
库,这是本文主要使用的数据分析工具。换言之,本文适用于了解数据分析而不了解链上数据获取的读者。本文会涵盖以下内容:
GraphQL
检索数据基础入门Basement
的基础API实战
在阅读本文前,读者最好安装一个支持GraphQL
请求方法的API调试工具,在此处,我个人使用的是Postman软件,但读者选择其他软件亦可。本文使用了新兴 Web3 链上数据API提供商basement,此处我们使用的是免费版,无需 API Key 等配置,具体限制参考下图:
关于Basement
的优势可参考Mirror 文章。
第一个请求
在进行第一个请求前,我们需要了解关于GraphQL
最基础的一些概念,首先GraphQL
实质上是一种类似SQL
的数据检索语言,当然其学习难度低于SQL
。当我们进行一次GraphQL
请求时,我们将GraphQL
语言编写的检索方法放在POST
的body
中,直接发送POST
请求到终端API节点即可。
我们给出一个来自GraphQL 官网的检索示例,索引请求如下:
{
hero {
name
}
}
返回如下:
{
"data": {
"hero": {
"name": "R2-D2"
}
}
}
由此可见,GraphQL
的检索是简单且易读的,基本遵从以下规则:
{
所需要的对象 {
对象属性
}
}
值得注意的是在现实世界中存在大量对象嵌套的情况,比如以下数据:
{
"data": {
"address": {
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"profile": {
"name": "vitalik.eth"
}
}
}
}
可抽象化为以下情况:
{
data对象 {
address 对象 {
address 属性
profile 对象 {
name 属性
}
}
}
}
关于如何获得这些信息,一个方法是查询文档,本次实战使用的Basement
在它的文档中给出了这些信息,如下图:
我们可以通过点击其中的蓝色链接确定每个Object
中的属性是否嵌套了另一个Object
。
显然,在以太坊区块链上遍历获得address
数据是不显示的,我们在此处需要引入一种方法筛选我们所需要的address
,这就是参数机制,读者可在此处找到相关文档。在Basement
中大量的对象必须与参数一同使用。在Basement
文档中参数被表示为Arguments
。
最后我们介绍一个执行检索的入口,即Query
对象,这些对象用于作为检索的入口与query
关键词配合。这些作为检索入口的Query
对象类型列表可以在此处文档找到。
有了上述简单的基础学习,我们就可以开始构建我们第一个GraphQL
索引,如下:
query Test {
address(address: "vitalik.eth") {
address
profile {
name
avatar
}
tokens(limit: 3) {
contract
name
tokenId
}
}
}
此处我们选择了入口检索对象为address
,此对象的参数仅有 1 个,即为address
,address
参数必须为字符串类型,可以为正常的 16 进制编码的以太坊地址,也可以是ENS地址。我任选了几个属于address
的属性进行检索,完整的属性列表可以在此处查询。
query
后的Test
是为本次查询所取的名字,并不重要,读者甚至可以删去此字段,直接使用query
关键词
请求的API的URL为https://beta.basement.dev/v2/graphql
,读者使用了Postman
进行请求的截图如下:
返回的结果如下: