FinOps有望降低企业50%+的云成本! 了解详情
写点什么

Facebook 开源数据查询语言 GraphQL

  • 2015-10-13
  • 本文字数:2170 字

    阅读完需:约 7 分钟

最近 Facebook开源了 GraphQL,它驱动了日均数十亿次的 API 调用,同时围绕它还形成也一个社区 graphql.org ;

一个 GraphQL 查询是一个字符串,它被发送给一个与数据模式无关的服务器,然后服务器返回 JSON 数据。GraphQL 是强类型的,并避免了版本控制,同时提供了随着数据演进可以轻易改进查询语句的能力。

InfoQ 找到了 Lee Byron,他在 Facebook 工作同时也是 GraphQL 的早期贡献者。

InfoQ:GraphQL 已经出现几年了。您能简要介绍一下它的历史和 Facebook 在进军移动计算的时候 GraphQL 是如何产生的?

Lee Byron:Facebook 最初作为一个网站被深深嵌入到我们原有的技术架构中。直到 2012 年,信息流都只能请求并从服务器以 HTML 的形式返回。在将信息流重建为以 iOS 原生 view 的形式进行展示的过程中,我们不得不重新改造这个架构来获得原始数据。

我们重新写了一个系统,它看起来非常像一个传统的基于 REST 的服务器,但作为 iOS 开发者发现它使用不便,并且我们看到了通过一个请求加载所有的信息同时使得我们的 REST 资源保持隔离之间的冲突。

特别是被分享的信息流故事和信息流故事的聚合体(它们本身就可能是被分享的信息流故事和信息流故事的聚合体)迫使我们不得不面对这个问题,使得我们重新思考如何去请求数据。

最终,在弄清楚信息流的原始数据应该如何处理以及确定通过移动网络请求数据的最佳方式的努力中,就产生了 GraphQL。

InfoQ:数据在本质上是分层的,同时它也是关系图。GraphQL 的中心目标是来表达这种图形关系吗?这种语言的其它目的是什么?

Lee Byron: 当然,我们觉得很奇怪,我们的应用程序的服务器代码以对象和关系的形式处理数据,然后以扁平的表格来表示它,后来才通过移动客户端的代码将它变回对象和关系。GraphQL 的早期目的 是以清晰和易于使用的目标来暴露服务器的数据。

GraphQL 还有其他几个重要的目的。它的设计是为了满足产品和创建它们的开发者的要求,而不是为了模拟一些数据库或满足传输语义。这有助于使 GraphQL 易于学习和使用,但它没有抽象任何特定数据库或传输方式以允许不同的方式来使用它。它同时也是强静态类型的,这有助于促进各信息设计的规则,并且支持很多类似错误检查、IDE 集成和代码生成有趣的工具。

InfoQ:服务器中的数据格式或服务器中的数据存储对 GraphQL 有没有影响?

Lee Byron: 没有。 GraphQL 不是像 MySQL 或 Redis 这样直接面向数据的接口,而是面向你已经存在的应用代码的接口。你可以把 GraphQL 看作是为了调用应用服务器上的方法的一些内嵌的 RPC。

InfoQ:你毫无顾忌地谈论以产品为中心来帮助 UI 开发者?REST 和 JSON 是否依然有意义以及不关心 UI 的中间件开发者如何使用它?

Lee Byron: 我认为以产品为中心帮助的不仅仅是用户界面开发。在 Facebook,GraphQL 在服务器代码中是一个真正强大的力量。JSON 肯定还是有意义的,它是 GraphQL 的主要传输方式。在 Facebook,我们构建产品时,GraphQL 取代了 REST,但是在提供公共 API 时 REST 仍然是一个有用的工具。

InfoQ:什么是 GraphQL 服务器?你能否详细说明一下强类型和 GraphQL 的路线图。目前缺少什么?

Lee Byron: 该 GraphQL 服务器的代码相对小一点 ; 它负责几件事情。它提供了定义你的类型系统和与服务器代码交互的工具。它接受 GraphQL 查询并且将验证他们以确保可以安全地和明确地在你的类型系统内运行。然后当然,它会依照你在你的类型系统内定义的代码来执行查询,这些代码可能是处理同步、并行和错误捕获的一些工作。

路线图之前还有两个方面需要解决。第一,需要更好地工具来帮助客户端开发者做一些类似于代码生成和查询管理之类的事情。Relay 是我们首要的和最显著的客户端工具。其次,在 GraphQL 中更好地支持流数据和推送的数据。在 Facebook 我们一直在探索这些领域并很高兴能够在未来分享我们的成功经验。

InfoQ:除了 Facebook,你可以说几家已经在使用 GraphQL 的公司,以及社区有多强大?什么是 Nuclide?开发者应该注意哪些其他的工具?

Lee Byron:GraphQL 仍然是一个新兴的技术。我们只在几个月前发布 GraphQL 的预览版,从那时起,我们已经看到了很多大大小小的公司的兴趣。Red Badger,总部设在英国的顾问公司,在开发金融时报的应用程序时已经使用了 GraphQL。 Reindex.io 是一个新公司,它将 GraphQL 作为一种服务提供给开发者。社区不仅仅使用 GraphQL,同时也创建它。我们几个月前发布了一款 GraphQL 的 JavaScript 版本,自那时以来,社区成员已经建立 GraphQL 的 Ruby、Java、Scala、.NET 和 Python 版本。我很高兴能在这样短的时间有这样的进展情况。

Nuclide 是 Facebook 的开发早期的 React Native 的 IDE,它使用了 Github 的 Atom 编辑器。React、Relay 和 React Native 都是非常有趣的工具,它们在产品工程领域提供了新的视角。 DataLoader 是我们最近发布的另一个工具,它包含了我们在 Facebook 使用了数年的模式并帮助我们构建了效率很高的 GraphQL 服务器。

感兴趣的读者不妨移步这里了解如何上手

查看英文原文: Facebook Open Sources Data Query Language GraphQL


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-13 19:009221
用户头像

发布了 32 篇内容, 共 17.9 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

人人可用的敏捷指标工具!Kyligence Zen 正式发布 GA 版

Kyligence

数据分析 Kyligence Zen 指标平台 大数据管理

MobPush创建推送

MobTech袤博科技

小红书自研小程序:电商体验与效果优化的运行时体系设计

小红书技术REDtech

架构 前端

实力担当!焱融文件存储再次中标中国移动项目

焱融科技

#高性能 #分布式文件存储 #文件存储 #中国移动

尚硅谷CDH 6.3.2视频教程发布

小谷哥

图文介绍 Windows 系统下打包上传 IOS APP 流程

ios 开发

上干货!小红书“薯条”业务竞价策略及最优公式详解

小红书技术REDtech

广告 机制策略

来2023用友BIP技术大会,与北京地铁等领先企业探索数智化转型路径

用友BIP

技术大会 用友iuap 用友技术大会 数智底座 技术底座

理一理事务实现

Zhang

MySQL 事务 数据库·

从一场文学奖评选,看金山文档To B 转型怎么走

B Impact

什么是文件传输协议,文件传输协议又是怎么工作的

镭速

公厕一体化智慧管理解决方案@光明源智能科技

光明源智慧厕所

智慧城市

中南财经政法大学教授施先旺:事项法会计促进业财合一和会计变革

用友BIP

技术大会 业财合一 业财融合 事项会计

openEuler RISC-V 23.03 创新版本亮相:全面提升硬件兼容性和桌面体验

openEuler

Linux 操作系统 openEuler 处理器 risc-v

在高并发场景下保证数据一致性:sync.Map的并发安全性实践

Jack

降本增效不是“盲目减脂”,利用亚马逊云科技达成云成本正循环

Lily

Zksync部署合约和开发代币的具体教程来了,撸空投必备方法

加密先生

被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了

程序员小富

Java git

540p秒变1080p!小红书端侧实时超分带你免流量玩嗨短视频

小红书技术REDtech

AI 算法 短视频

捷行十周年庆,惊喜活动

ShineScrum捷行

重新理解RocketMQ Commit Log存储协议

Apache RocketMQ

RocketMQ 消息队列

码头风云——5G降临

脑极体

5G

AIGC爆火的背后需要掌握的基础原理

飞桨PaddlePaddle

人工智能 AI 百度飞桨 AIGC

想让 ChatGPT 帮忙进行数据分析?你还需要做......

Kyligence

数据分析 指标平台

京东技术专家首推:微服务架构深度解析,GitHub星标120K

程序知音

Java 微服务 springboot java架构 Java进阶

天天预约|如何使用「代预约」功能?全在这篇文章里!

天天预约

线上预约 预约工具 预约 预约小程序

一站式指标平台 Kyligence Zen 登陆亚马逊云科技 Marketplace

Kyligence

数据分析 指标中台

软件测试/测试开发丨电商业务的性能测试必备基础知识

测试人

软件测试 Jmeter 性能测试 测试开发

低代码开发,是稳打稳扎还是饮鸩止渴?

引迈信息

前端 低代码 JNPF

软件测试/测试开发丨UI自动化测试,PageObject设计模式

测试人

软件测试 自动化测试 测试开发 UI自动化 pageobject

T 级数据量迁移!知名云巨头如何从 Jira 切换至 ONES?

万事ONES

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
Facebook开源数据查询语言GraphQL_语言 & 开发_Rags Srinivas_InfoQ精选文章