阅读 98

grapql api oh the graph

我们在schema.graphql中定义了Entity

  1. 对于我们定义的Entitythe graph都会在内部为我们生成entity(查询单个对象)entities(查询对象列表)两个顶级的Query type

    type ExampleEntity @entity {
      id: ID!
      count: BigInt!
      hash: Bytes! # bytes32
      exchange: Bytes! # address
    }复制代码
    {
       exampleEntity(id: "0x1121211212") {
           id
       }
    }复制代码
    {
      exampleEntities {
          hash
          id
      }  
    }复制代码
    • query a list of entities

    • query a single entity

    • 假设我们定义了一个下面的Entity

支持的查询能力

  1. 排序(Sorting

{
   exampleEntities(sortBy: count, orderDirection: asc) {
         hash
         count
   }   
}复制代码
  1. 分页(Pagenation

// 查询10条数据,从10条开始
{
   exampleEntities(first: 10, skip: 10) {
         hash
         count
   }   
}复制代码

TIPS:

  • 默认排序规则是按照ID 的字母数字升序,而不是创建时间

  • skip参数要避免过大的值,因为查询性能不好

  • 如果客户端需要查询大数据量的实体,先使用一个基础属性值进行查询,然后对这个基础属性值做过滤,会更加的高效(第一次,它会发送带有 lastID = "" 的查询,并且对于后续请求,会将 lastID 设置为前一个请求中最后一个实体的 id 属性。这种方法的性能明显优于使用增加的跳过值)

  • 默认查询列表会返回100条数据,最大单次查询指定上限为1000,可以使用skip进行分页!!!

  1. 过滤(Filtering

// 使用where来设置过滤条件
// 等于指定的值
{
   exampleEntities(first: 10, where: {count: 10}) {
         hash
         count
   }   
}
// 一些查询后缀
_not_gt_lt_gte_lte_in_not_in_contains_not_contains_starts_with_ends_with_not_starts_with_not_ends_with
// count 大于10
{
   exampleEntities(first: 10, where: {count_gt: 10}) {
         hash
         count
   }   
}复制代码

TIPS:

  • 可以设置多个过滤条件

  1. 查询历史数据(不仅仅是当前块)

{
  exampleEntities(first: 10, block: {number: 890000}){
    id
  }
}复制代码
  1. 全文检索(fulltxt query search

TIPS:

  • 使用全文搜索之前,需要对对应的字段进行定义:thegraph.com/docs/develo…

Schema定义

  1. The Graph使用标准的Grapshql interface defination language

  2. The Graph只支持queries定义,并且自动生成对应的代码

  3. 目前,The Graph要求每一个被@entity指令标记的Entity必须包含一个ID


作者:ngnice
链接:https://juejin.cn/post/7020291249127030820


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐