不像大部分的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. awk使用教程

    gawk - pattern scanning and processing language 基本用法:gawk [options] 'program' FILE ... program:PATTE ...

  2. (C/C++学习笔记) 二十三. 运行时类型识别

    二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...

  3. asp.net mvc 获取ajax的 request payload 参数

    注意事项: 传输的格式要设置城:"contentType": "application/x-www-form-urlencoded"

  4. page指令import属性实例

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  5. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(一)

    [MyEclipse最新版下载] 一.创建一个EJB项目 1. 选择File>New Project,选择EJB Project,然后单击Next. 2. 在Project name字段中输入f ...

  6. day 41 mysql 函数 事物

    mysql 函数 事务   mysql 中提供了许多内置函数 CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符.一个多字节字符算作一个单字符. 对于一个包含五个二字节字 ...

  7. fread 不能读取最后一个数据块

    今天遇到一个问题,fread()竟然不能读取文件中的最后一个数据块. 我定义了一个结构体: Persong { char name[10]; char phone[15]; } 以及两个函数: int ...

  8. python基础题型一

    一.执行Python脚本的两种方式 #python name.py   Python解析器 #chmod +x name.py 二.简述位.字节的关系 1Byte=8bit 三.简述ascii.uni ...

  9. python 常用的高阶函数

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...

  10. python 递归函数操作方法

    .递归 是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知.使用递归解决问题,思路清晰,代码少.但是在主流 ...