多数据库支持的实时GraphQL引擎EasyGQL

多数据库支持的实时GraphQL引擎EasyGQL

(1)GraphQL

GraphQL是一个用于API的查询语言,也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具[1,https://graphql.cn/]。它是2012年由Facebook创造的一种用于描述CS架构应用中数据模型的能力和要求的语言,它从产生之初就一直在进行演化,目前已经被各种体量的开发团队使用,比如Facebook、Twitter、github、pinterrest等。
GraphQL具有如下设计原则:

  • 层次分明:今时今日的大部分产品开发都涉及到创建和操作视图层次。为了满足应用结构的层次性,每个GraphQL查询也是层次构建的,每个查询和其数据共用了相同的形状,这样的方式在描述数据需求上更为直观。
  • 以产品为中心:不可置辩的说,GraphQL是一种视图需求驱动的语言,因为主要是前端工程师书写它。GraphQL从前端工程师的思想和需求出发,再开发了语言和运行时库以满足这些需求。
  • 强类型:每个GraphQL服务器都会构建一个针对应用的类型系统,查询语句就在这个类型系统上下文中执行。对于一个查询语句,GraphQL工具可以在执行以前通过类型系统检查这个查询语句的语法正确性和查询有效性,譬如在开发期,服务器就能保证返回值的形状和特性。
  • 客户端定制:通过类型系统,GraphQL向客户端通告了自己那些可以被消费的能力。而客户端则专注于如何消费这些能力,其查询语句的粒度是字段级的。在大多数没有GraphQL的CS模型应用中,不同的服务端用不同的脚本和入口决定了返回的数据。而GraphQL查询则会返回客户端要求的数据,不多不少。
  • 内省:GraphQL是内省的,一个GraphQL服务器的类型系统必须能用GraphQL语言自身来查询,本规范将后文描述此特性。GraphQL的内省特性使之能成为建造通用工具和客户端库的强大平台。
    基于这些原则,GraphQL在建造客户端应用的时候就成了强大的生产环境。产品开发者和设计师在高质量工具的支撑下,无需阅读大量文档,只需一点或者无需正式训练就能根据GraphQL服务器建造客户端。当然为了完成这个目的,这些服务器和工具的建造者也必不可少。(注:具体GraphQL介绍参见GraphQL规范)
    相比于传统的Restful接口,GraphQL的意义主要体现在以下几个方面。
  1. 接口的可重用性。在使用Restful API时,针对不同的查询场景,比如查询一个用户的信息、一个用户的所有博客、一个用户的所有订阅信息时需要使用不同的接口。使用Restful API,可以用一个数据接口方便的满足所有这些查询需求。
  2. 数据获取的准确性。在使用Restful API时,我们只能掉固定的接口获取固定格式的数据,这样总是容易获取更多(比实际需要)或少获取数据,很难针对某一次查询设计一个API返回刚刚好的数据。
  3. 满足前端快速迭代的需求。在使用Restful API时,前端的快速迭代会给后端开发带来很大的压力。
  4. 更方便的后台数据统计,因为GraphQL的使用者,总是请求他们需要的数据,所以后端可以通过分析GraphQL的请求情况,准确的分析各种业务数据的实际价值。
  5. 类型系统和格式定义的好处。GraphQL使用强类型系统去定义一个API所提供的服务,所有的类型都事先在GraphQL格式定义中事先约定好了。

EasyGQL

EasyGQL(Easy GraphQL)[github网址:https://easygql.github.io/doc/]是由Zukdoor团队[网址:https://zukdoor.cloud]于2019年10月份推出的一款多数据库支持的实时GraphQL 引擎。能够让开发者非常方便的进行GraphQL类型定义,并能够为开发者灵活的提供各种类型的graphql接口。在产品功能和类别上与Prisma、Hasura类似,与这些产品相比它主要具有以下特点:

  1. 多种数据库支持。
  2. 高效实时的订阅
  3. 灵活的数据访问权限控制
  4. 方便的API整合

多种数据库支持

目前EasyGQL能够支持的数据库类型有RethinkDB,MongoDB,未来还将支持PostreSQL、MySQL、Cassandra等数据库。EasyGQL可以根据自己的需要为自己的Schema选用合适的数据库类型。不同数据库的特性如下:

MongoDBRethinkDBPostgreSQLMySQL
事务性较差较差很好很好
实时性较差很好很好不支持
稳定性较好一般很好很好
CPU消耗较高较高较低较低
内存消耗较高较高较低较低
是否支持非结构化数据

实时的GraphQL引擎

EasyGQL能够为所有对象提供变更订阅的接口,当订阅中的结果集中有对象发生变化时,会将变化的结果立即返回给订阅者,可以满足一些需要实时监听数据变化的开发需求。

灵活的数据访问权限控制

EasyGQL提供基于API和用户信息的行级、列级访问权限控制,开发者通过EasyGQL的控制台可以非常方便的为Schema中的每一个数据类型的每一个接口进行权限设置,设置具有调用权限的角色,并且可以根据用户属性限制用户可以查询和操作的数据行和列。

方便的API整合

EasyGQL提供Trigger的定义功能,开发者可以通过为Schema中的每一个数据类型设置多种Trigger,并为每一个Trigger设置一个外部Restful API,当对应数据类型的数据发生变化时,EasyGQL会主动将变更的数据发送给外部Restful API,从而实现与第三方API的整合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值