zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Django-model基础
    web框架
    django-MTV
    我与前端之间不得不说的三天两夜之jQuery
    vertical-align和line-height的深入应用
    我与前端之间不得说的三天两夜之css基础
    mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数
    我与前端之间不得不说的三天两夜之html基础
    hdu2206 IP地址的计算
    get方式中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9953923.html
Copyright © 2011-2022 走看看