什么是GraphQL?

前言

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

你可能感兴趣的:(什么是GraphQL?)