Hasura GraphQL schema 生成是如何工作的
不像大部分的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 生成是如何工作的的更多相关文章
- graphql-compose graphql schema 生成工具集
graphql-compose 是一个强大的graphql schema 生成工具集 包含以下特性 快速便捷的复杂类型生成 类型仓库,类型可以存储在schemacomposer 存储中 包含flowt ...
- hasura graphql schema 导出
使用的是apollo 的插件 安装apollo npm install -g apollo 基本使用 因为我使用了模式拼接,所以地址有变动,一般是 http://host:port/v1alpha1/ ...
- hasura graphql pg 自定义函数的使用
hasura graphql 的安装可以参考相关项目 创建函数 数据表创建 CREATE TABLE sql_function_table ( id SERIAL PRIMARY KEY, inp ...
- [GraphQL] Write a GraphQL Schema in JavaScript
Writing out a GraphQL Schema in the common GraphQL Language can work for simple GraphQL Schemas, but ...
- [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 ...
- [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 ...
- 通过torodb && hasura graphql 让mongodb 快速支持graphql api
torodb 可以方便的将mongo 数据实时同步到pg,hasura graphql 可以方便的将pg 数据暴露为graphql api,集成在一起真的很方便 环境准备 docker-compose ...
- hasura graphql server 集成gatsby
hasura graphql server 社区基于gatsby-source-graphql 开发了gatsby-postgres-graphql 插件, 可以快速的开发丰富的网站 基本使用 安装h ...
- hasura graphql server event trigger 试用
hasura graphql server 是一个很不错的graphql 引擎,当前版本已经支持event triiger 了 使用此功能我们可以方便的集成webhook功能,实现灵活,稳定,快捷的消 ...
随机推荐
- GNU C的定义长度为0的数组
在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNU C中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0];很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在 ...
- 框架:MVC
MVC 一.介绍 MVC是模型-视图-控制器的缩写,一种软件思想,强制性的把应用程序的输入.处理和输出分开.可以和任何的重定向能解耦. 三部分的任务说明: 视图:获取数据,显示数据 模型:处理数据 控 ...
- ios九宫格算法
- (void)viewDidLoad { [super viewDidLoad]; //1.总列数(一行最多3列) ; CGFloat appW=; CGFloat appH=; //2.间隙=(控 ...
- php usort
<?phpfunction re($a,$b){ return ($a>$b)?1:-1; }$x=array(1,3,2,5,9);usort($x, 're');print_r($x) ...
- 并行【parallel】和并发【concurrency】线程是并发还是并行,进程是并发还是并行
线程是并发,进程是并行:进程之间相互独立,是系统分配资源的最小单位,同一个线程中的所有线程共享资源. 并行,同一时刻多个任务同时在运行. 并发,在同一时间内隔内多个任务都在运行,但是都不会在同一时刻同 ...
- python day 06 作业
- Python基础2--Python简单数据类型
python简单数据类型 1 list list的创建,使用[] a_list = [‘a’, ’b’, ‘c’] print a_list print a_list[0] #a 如果去list的最后 ...
- IDEA发布应用时发布到lib下面的包不全
IDEA发布应用时发布到lib下面的包不全,Tomcate启动时就报:At least one JAR was scanned for TLDs yet contained no TLDs. Enab ...
- m3u8编码视频webgl、threejs渲染视频纹理demo
<!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>fz-live< ...
- oracle死锁测试
测试一个死锁,看看oracle会报什么错误,以及oracle如何处理 1.创建测试表,测试数据 2.第一轮update,delete 两个会话,不同的行 3.第二轮,delete,update两个会话 ...