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功能,实现灵活,稳定,快捷的消 ...
随机推荐
- python的编码与转码
编码问题一直是初学者的难题,搞不明白.甚至一些程序员做了多年的程序,但是编码一直整不清,下面就来认识认识编码吧. ASCII(American Standard Code for Informatio ...
- elk之logstash
环境: centos7 jdk8 1.创建Logstash源 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch touch ...
- SharePoint REST API - OData查询操作
博客地址:http://blog.csdn.net/FoxDave 本篇主要讲述SharePoint REST中OData的查询操作.SharePoint REST服务支持很多OData查询字符串 ...
- synchronized(一)
/** * 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. * synchronized:可以在任意对象及方法上加锁, ...
- 在 子 iframe中 点击一个按钮, 变换 这个 iframe的地址url.
//跳到测试结果: function jump() { console.log(self.parent.document.getElementById("iframe").src) ...
- python分析nginx自定义日志
# -*- coding:utf-8 -*- import datetimeimport re logfile = '''192.168.23.43 - 2017-12-14:00:14:41 /se ...
- C#清理所有正在使用的资源
namespace QQFrm{ partial class Form1 { /// <summary> /// 必需的设计器变量. ...
- springmvc跳转到自定义404页面的三种方法
有时候我们并不想跳转到系统自定义的错误页面中,那么我们需要自定义页面并且实现它的跳转 有三种方法可以实现 方法一:最简单的实现,也是最快的 在<web-app>节点下配置 代码如下: &l ...
- [工作日志] 2018-11-30 重要: 1. 多条件+ 分页 + 多表联查 2. idea拉新分支
多条件+ 分页 + 多表联查 多条件查询 1.pom依赖 <dependency> <groupId>commons-dbutils</groupId> <a ...
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Outp ...