共计 1454 个字符,预计需要花费 4 分钟才能阅读完成。
前言
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
正文完
发表至: javascript
2021-01-22