Meteor开发指南 — 响应式GraphQL

原文来自Kadira Voice,标题为「Meteor’s Reactive GraphQL Is Just Awesome」。

Meteor正在着手开发一套响应式的GraphQL实现,他们在前几天放出了一份high-level technical documentation。这篇文章是该设计文档的总结和我对这个项目的一些想法。

这是 GraphQL

GraphQL 是一个Facebook提出的应用层的查询语言。它有许多的伴随工具和库,比如Relay,GraphiQL,和express-graphql。同时,它也有许多其它语言的实现。

如果你不知道GraphQL或者觉得它很难理解,那么可以试试这个交互式的LearnGraphQL课程。许多人都非常喜欢它。

什么是响应式 GraphQL?

首先,我们看一下下面这张图:

  • 这里,客户端A使用GraphQL查询来获取数据并且渲染视图,也就是一篇博客文章。
  • 客户端B在这篇文章下面发布了一条评论。
  • 那条评论会自动推送到客户端A。应用的开发者不需要写任何显式的代码来获取那条评论。

这就是响应式GraphQL。你不必重新获取数据或是手动的重新加载网页。

基本上,它就是Meteor但是加上了GraphQL。你可以使用MongoDB,SQL数据库,REST APIs或者几乎任何其他数据源。

响应式GraphQL开发体验

大多数的繁重工作已经被响应式GraphQL库和工具完成了。所以,你只需要简单地在服务端编写GraphQL的数据模式,在客户端编写查询即可。

以下是一个典型的开发体验:

  • 你在服务端写了GraphQL的数据模式,并且使用特定的数据库驱动来从数据库获取数据。
  • 你可以按需使用你自己的数据源。
  • 在客户端,你可以像平常使用GraphQL那样创建查询和调用修改。
  • 为此,你需要使用一个客户端库响应式GraphQL。(它在背后使用Relay作为缓存处理了所有响应式的东西)

就这么简单。现在,你的所有GraphQL请求都是响应式的,并且你的客户端app总是有依照数据模式的最近的数据。

部署和扩展App

部署一个响应式的GraphQL应用也非常简单。仅仅部署它,并且扩展至足够的容器(或服务器)中。服务端app只是一个有着响应式GraphQL数据库驱动的express-graphql

所以你只需要按照普通Node.js的应用部署和扩展方式进行处理。

听起来不错!那么它在哪儿处理响应式呢?

好问题。你的应用服务器并不知道响应式或如何验证错误查询。它仅仅暴露一些GraphQL的数据模式。

响应式由另一个服务器处理,也被称作失效服务器

失效服务器

这是一个轻量级服务器,用来追踪所有通过GraphQL数据模式发送到客户端的文档版本。你的应用服务器发送所有查询请求和修改到这个服务器上。

你的应用客户端会与这个失效服务器交流并且观察所有的失效记录。如果有失效记录的话,它会从GraphQL应用服务器获取数据。(失效服务器会判断旧版本是否失效,返回新版本的数据)

整个流程如此设计,所以维持了使用的方便性并且没有牺牲性能。了解更多信息,请参见Design documentation。

这个失效服务器并不真的处理数据。通常它对数据一无所知。你可以把它理解成一个分布式的版本跟踪服务。

Meteor的计划是把失效服务器作为一个开源项目,并且隶属于响应式GraphQL项目。

很有可能Galaxy (Meteor’s hosting service)会提供一个托管的失效服务器供你的app使用。所以,你不必担心你的服务端了。

视图层:React, Angular, Blaze, etc.

GraphQL通常与基于React和Relay的应用联合使用。但是响应式的GraphQL却是独立于视图层的。在客户端,它仅仅是一个响应式数据源。你可以将它和任何的视图层相结合。无论是Angular,React,Blaze还是其他没有实现的框架。

如果你需要一个示例,请参考Lokka。它是一个简单的GraphQL JavaScript客户端。客户端响应式GraphQL会和Lokka相似,但是有了响应式的种种好处。

更多信息

这篇文章仅仅简要介绍了一下响应式GraphQL。这个项目仍处于设计阶段。你可以查看下面这些文档获取更多信息。

Reactive GraphQL: High Level Design

这篇文章简明易懂,你可以看看其下的讨论。

参考

  • Meteor’s Reactive GraphQL Is Just Awesome
  • High-level design

原文发布于微信公众号 - 星流全栈(MeteorFullStack)

原文发表时间:2016-02-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

原创10000+生信教程大神给你的RNA实战视频演练

推荐使用偷懒方法,比如安装miniconda软件,下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/mini...

41010
来自专栏小文博客

华为Mate10安装黑域

50640
来自专栏生信宝典

免费Linux系统和生信宝典原创学习教程

生物信息的学习离不开Linux系统,不管自己写命令处理数据,还是使用现有的工具。Linux对我们来讲最重要的是它强大的命令行功能,可以快速、批量、灵活的处理数据...

24630
来自专栏吾爱乐享

php学习之html案例(九)

17720
来自专栏安恒信息

安恒信息紧急预警 严重漏洞影响全版本Windows

近日名为“SANDWORM”的俄罗斯黑客组织被曝利用Windows最新0day漏洞(漏洞编号:CVE-2014-4114)针对北约、乌克兰政府组织、欧盟电信和能...

35490
来自专栏HBStream流媒体与音视频技术

随便写了个猪八戒网的任务小助手“小八戒”,需要的拿去

28240
来自专栏生信技能树

HiC数据辅组基因组组装之Lachesis

Lachesis是希腊神话众神之一,负责决定生命之线的长度。但是咱们这个lachesis是2013年发表在nature biotechnology上(https...

1.1K20
来自专栏Pythonista

centos7之iptables与firewalld

保障数据的安全性是继保障数据的可用性之后最为重要的一项工作。防火墙作为公网 与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用。

17710
来自专栏开源项目

2017 JavaScript 开发者的学习图谱 | 码云周刊第 25 期

码云项目推荐 1前端框架类 1. 基于 Vue.js 的 UI 组件库 iView ? 项目简介:iView 是一套基于 Vue.js 的 UI 组件库,主要服...

36170
来自专栏安恒信息

预警 | Windows再爆SMB服务0day漏洞 安恒信息提供一键修复工具

在刚刚结束的2017年度DEFCON大会上,安全研究人员曝光了一个潜伏在Windows系统上长达20年之久的安全漏洞。该漏洞被命名为SMBLoris,攻击者使用...

362110

扫码关注云+社区

领取腾讯云代金券