云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

美国服务器_cdn节点部署_价格

小七 141 0

在这篇文章中,我想到了GraphQL,以及它与现有的数据管理思想的关系,以及通过有线协议对数据进行结构化的暴露。

更新:这篇文章现在也有音频格式–请看Tech loud上的插曲。

上周,chrispaine在Twitter上与我们分享了一些关于GraphQL的评论,360大数据,以及它与OData的比较。这是一个有趣的想法,引起了各种各样的讨论。我对GraphQL了解不多,所以我花了一点时间来研究它。到目前为止没有太多的时间,所以请把这些想法看作是来自一个对GraphQL本身接触非常有限的人?

GraphQL是一个开源规范,源于Facebook的一个工程团队。我消费的其中一件作品是GraphQL的创作者之一Lee Byron的一篇演讲:"GraphQL 4年的经验教训",而我的收获之一是,清晰的激情为GraphQL带来了早期的成功。除了规范之外,淘客qq群,还有一个JavaScript的参考实现,随着时间的推移,已经出现了十几个不同语言的实现。

GraphQL主页上的示例很好地概括了它的外观和感觉

GraphQL是一种api查询语言,是一个用java实现这些查询的运行时您的现有数据。与规范和实现的许多组合一样,它也是一个社区,企业应用开发平台,开发人员创建服务器端组件和客户端库的实现。

随处可见的软件之一是Graphiql,这是一种基于浏览器的REPL*式浏览器,您可以在左侧输入GraphQL查询(请参见上图中的"询问您想要什么")并在右侧查看这些查询的结果(请参见上图中的"获取可预测的结果")。查询和响应采用类似JSON的结构形式,这很好。

*REPL代表读取-评估-打印循环,在许多语言中是一个简单的实时环境,您可以直接与语言或服务交互,手动编程或探索它提供的可能性。

一个根本不同的数据存储

一个GraphQL的核心特性之一是数据存储的形状。它不是层次的,不是关系的,而是图形化的。持久化的实体通常是节点(事物)或弧(事物之间的关系)。我之所以使用"节点"和"弧"这两个词,是因为数据存储并不是什么新鲜事——在我的经验中肯定不是这样。

早在SAP社区网络诞生(2003年)之前,人们就围绕语义网的主题进行了大量的活动和思考,即通过HTTP存储和检索内容的想法可以在一个独立的、丰富的语义层中进行描述,从而为Web上的实体带来意义。指资源所代表的事物的类型,以及它们之间的关系。

这种意义是用节点(资源)和弧(这些节点之间的关系)来表达的,用来描述这些节点和弧的语言是资源描述框架(RDF),以及各种基于RDF并与RDF结合使用的本体语言(OWL——与都柏林核心一起的"Web本体语言"是其中比较著名的一种)。

RDF节点和弧

我对RDF着迷了很长时间,并在2000年初涉足了各个方面——请看我的网站上的RDF标签在博客上看到一些关于这个主题的帖子。当然,RDF可以被看作是OData的祖先之一,这在某种程度上是相当讽刺的。

RSS最初是一种基于RDF的语言(当时RSS代表RDF站点摘要),Atom是RSS的继承者,OData是Atom的扩展(以及Atom发布协议)。但这是另一个时代的故事。

RDF和图形数据库

RDF信息以所谓的"三元组"形式表示:

其中"主体"和"客体"实体是节点,"谓词"是弧——它们之间的线。三元组存储在"三元组"中,三元组的一种更一般化的形式是…等等…一个图形数据库。

对我来说,三元组的简单结构与三元组存储的非结构化或无限制性之间的张力有一种根本的美。它与关系数据存储的模式约束模型相差甚远。使用图形数据存储,您可以存储未计划的信息,并询问您在一开始就无法预见的数据问题。你可以想象一个不断增长的弧和节点网络,具有不同的类型和属性,被添加到一个图形数据库中,并对该数据库进行新的查询,过滤一开始甚至不存在的属性和关系。

GraphQL,作为一个数据存储,那么,是相当强大的。当然还有其他一些图形数据存储的例子——一想到Neo4j就马上想到了,它已经存在了很长一段时间了。

讽刺

为什么RDF和它密切相关的图形数据存储概念以及与GraphQL的链接是OData的祖先呢?

因为当你从数据存储向上移动到协议栈时,事情几乎没有什么不同。以下是我在协议级别上看到的OData和GraphQL之间的主要差异的简要总结。

协议级别的GraphQL在某些方面让我想起了web服务。不是WS-Deathstar的全部规范,而是所有操作和查询都有一个端点的方式。这让我有点不舒服。不是因为这感觉像是回到了web服务糟糕的旧时代,而是因为作为HTTP的倡导者(一种应用程序协议,可以说是功能强大的分布式web服务的最佳示例,但这是另一个时代的故事),我觉得它不太对

比较和对比