不像大部分的graphql 引擎,使用标准的graphql 规范的处理模型,Hasura graphql 不存在resolver 的概念(实际上是有的,只是转换为了sql语法)
以下是Hasura graphql 引擎的内幕

表的处理

假设有一张表 profile(id,name) 需要暴露为graphql api ,以下是Hasura 的处理方式

  • 根据表生成一个graphql 类型(type)
  • 根据表生成聚合函数的graphql 类型
  • 同时还会生成关系聚合函数的数据类型
  • 生成查询参数 where、order_by limit offset (input 参数)
  • 生成支持批量insert 以及upsert 的突变
  • 生成支持更新的突变
  • 生成删除条件的突变

视图的处理

视图与表类似,支持不会生成突变操作

关系或者连接

包含表与表、表与视图、视图与视图的关系,操作根据配置的关系生成对于的类型以及input 参数
你可定对象关系(类似一对一),数组关系(一对多)
如下:

- 你可能有一个关系restaurant.average_rating 其中average_rating 是一个视图通过restaurant_id
与restaurant 表进行关联
- 你可能有一个user.addresses 其中每一个用户包含多地址的连接

对于以上的管理,graphql 的处理方式

  • 添加嵌套类型的引用来扩展涉及的表以及视图类型
  • 增加用户嵌套的过滤 where order_by
  • 增加嵌套类型的聚合函数的数据类型

resolver

Hasura 引擎没有任何的解析器,引擎实际上是一个编译器,将graphql 查询编译为sql 查询
Hasura 的graphql 语法是经过优化的,新的版本包含了一个分析的按钮,可以清晰的看出处理

元数据

Hasura 将特定的元数据存储在pg 数据库中,对于一些常见的问题,我们可以通过调整数据库来处理,
实际上新的版本已经支持了reset 的功能

参考资料

https://docs.hasura.io/1.0/graphql/manual/schema/how-it-works.html

 
 
 
 

Hasura GraphQL schema 生成是如何工作的的更多相关文章

  1. graphql-compose graphql schema 生成工具集

    graphql-compose 是一个强大的graphql schema 生成工具集 包含以下特性 快速便捷的复杂类型生成 类型仓库,类型可以存储在schemacomposer 存储中 包含flowt ...

  2. hasura graphql schema 导出

    使用的是apollo 的插件 安装apollo npm install -g apollo 基本使用 因为我使用了模式拼接,所以地址有变动,一般是 http://host:port/v1alpha1/ ...

  3. hasura graphql pg 自定义函数的使用

      hasura graphql 的安装可以参考相关项目 创建函数 数据表创建 CREATE TABLE sql_function_table ( id SERIAL PRIMARY KEY, inp ...

  4. [GraphQL] Write a GraphQL Schema in JavaScript

    Writing out a GraphQL Schema in the common GraphQL Language can work for simple GraphQL Schemas, but ...

  5. [GraphQL] Serve a GraphQL Schema as Middleware in Express

    If we have a GraphQL Schema expressed in terms of JavaScript, then we have a convenient package avai ...

  6. [GraphQL] Create a GraphQL Schema

    we’ll take a look at the GraphQL Language and write out our first GraphQL Schema. We’ll use the grap ...

  7. 通过torodb && hasura graphql 让mongodb 快速支持graphql api

    torodb 可以方便的将mongo 数据实时同步到pg,hasura graphql 可以方便的将pg 数据暴露为graphql api,集成在一起真的很方便 环境准备 docker-compose ...

  8. hasura graphql server 集成gatsby

    hasura graphql server 社区基于gatsby-source-graphql 开发了gatsby-postgres-graphql 插件, 可以快速的开发丰富的网站 基本使用 安装h ...

  9. hasura graphql server event trigger 试用

    hasura graphql server 是一个很不错的graphql 引擎,当前版本已经支持event triiger 了 使用此功能我们可以方便的集成webhook功能,实现灵活,稳定,快捷的消 ...

随机推荐

  1. Python3.7.0的安装方法

    安装Python3.7.0 1.下载Python-3.7.0.tar.xz包安装 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.t ...

  2. loadrunner json中文无法识别问题

    http://blog.sina.com.cn/s/blog_6ff7a3b50101awmy.html

  3. CAN总线(1)--初探(更新中)

    前言: CAN总线可以控制可以使用Xilinx中IP核来直接实现,也可以使用专用的CAN芯片(例如:SJA1000)通过单片机和FPGA驱动控制来实现: 目前是使用控制器SJA1000来进行实现: C ...

  4. Gym - 100971J (思维+简单bfs)

    题目链接:http://codeforces.com/gym/100971/problem/J J. Robots at Warehouse time limit per test 2.0 s mem ...

  5. 点击图片或者鼠标放上hover .图片变大. 1)可以使用css中的transition, transform 2) 预先设置一个 弹出div. 3)弹出层 alert ; 4) 浏览器的宽度document.documentElement.clientWidth || document.body.clientWidth

    变大: 方法一: 利用css属性. 鼠标放上 hover放大几倍. .kecheng_02_cell_content img { /*width: 100px; height: 133px;*/ wi ...

  6. python-函数参数不固定

    默认参数的应用场景: 1.默认安装 2.数据库连接,默认端口号   参数不固定的情况: 参数组: args:将接收的位置参数转换成元组 def test(*args):     print(args) ...

  7. 4-log4j2之切分日志文件

    一.添加maven依赖 <dependencies> <dependency> <groupId>org.apache.logging.log4j</grou ...

  8. mysql解决数据库高并发

    分表分库 数据库索引 redis缓存数据库 读写分离 负载均衡: 将大量的并发请求分担到多个处理节点,由于单个处理节点的故障不影响服务,负载均衡集群同事也实现了高可用性.

  9. laravel 添加验证码

    1.  安装依赖  composer require gregwar/captcha 2.使用 use Gregwar\Captcha\CaptchaBuilder; use DB; use Requ ...

  10. 【Think in java 读书笔记】多态

    在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征.