前言
GraphQL 是一个用于 API 的查询语言,是一个应用基于类型零碎来执行查问的服务端运行时(类型零碎由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依附你现有的代码和数据撑持。
GraphQL 是 Facebook 于 2012 年在外部开发的数据查询语言,在 2015 年开源,旨在提供 RESTful 架构体系的代替计划。
GraphQL查问是服务器解释的字符串,该服务器以指定格局返回数据。参考官网查问示例:
{ user(id: 3500401) { id, name, isViewerFriend, profilePicture(size: 50) { uri, width, height } }}
查问的响应:
{ "user" : { "id": 3500401, "name": "Jing Chen", "isViewerFriend": true, "profilePicture": { "uri": "http://someurl.cdn/pic.jpg", "width": 50, "height": 50 } }}
下面只是一个简略的示例,但也能够体现出许多设计思维:
- 层次结构:当今大多数产品开发都波及视图层构造的创立和操作。为了与这些应用程序的构造保持一致,GraphQL查问自身是字段的分层汇合。查问的形态与返回的数据一样。
- 以产品为核心: GraphQL毫无疑问地受到视图和编写视图的前端工程师的要求的驱动。从他们的思维形式和需要开始,并构建实现该指标所需的语言和运行时。
- 客户端指定的查问:在GraphQL中,查问标准是在_客户端_而不是在_server_中编码的。这些查问以字段级别的粒度指定。在不应用GraphQL编写的绝大多数应用程序中,服务器确定在其各种脚本端点中返回的数据。而GraphQL查问仅返回客户要求的内容,其余不再返回。
- 向后兼容:在没有强制降级的已部署本机挪动应用程序的世界中,向后兼容性是一个挑战。例如,Facebook以两个星期的固定周期公布应用程序,并承诺将这些应用程序_至多_保留两年。这意味着每个平台_至多有_52个版本的客户在任何给定工夫查问咱们的服务器。客户指定的查问简化了咱们向后兼容性保障的治理。
- 结构化的任意代码:具备字段级粒度的查询语言通常间接查问存储引擎,例如SQL。GraphQL是在服务器上强加了一个构造,并公开了反对的字段。这样既能够实现服务器端的灵活性,又能够在整个应用程序的整个外表范畴内应用对立,弱小的API。
- 应用层协定: GraphQL是应用层协定,不须要特定的传输。它是服务器解析和解释的字符串。
- 强类型: GraphQL是强类型。给定查问,工具能够确保在执行之前(即在开发时)在GraphQL类型的零碎内查问在语法上既正确又无效,并且服务器能够对响应的构造和类型做出某些保障。这样能够更轻松地构建高质量的客户端工具。
- 自省: GraphQL自省。客户端和工具能够应用GraphQL语法自身来查问类型零碎。这是构建工具和客户端软件的弱小平台,例如将传入数据主动解析为强类型接口的性能。它在诸如Swift,Objective-C和Java之类的动态类型语言中特地有用,因为它打消了须要反复且容易出错的代码来将原始的未类型化JSON改编为强类型业务对象的需要。
- 文档: GraphQL的文档永远和代码同步,开发无需保护散落多处的文档,调用者也无需放心过期问题,而且基于而且基于类型零碎的强力撑持和 graphql-tools,mocking 会变得无比容易
参考资源:
GraphQL Introduction