当前位置: 首页 > 后端技术 > Node.js

什么是GraphQL?

时间:2023-04-03 19:58:41 Node.js

前言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":"景琛","isViewerFriend":true,"profilePicture":{"uri":"http://someurl.cdn/pic.jpg","width":50,"height":50}}}以上只是一个简单的例子,但它也可以反映出许多设计思想:层次结构:当今大多数产品开发都涉及视图层结构的创建和操作。为了与这些应用程序的结构保持一致,GraphQL查询本身就是字段的分层集合。查询的形状与返回的数据相同。以产品为中心:GraphQL无疑是由视图的需求和编写它们的前端工程师驱动的。从他们的心态和需求开始,构建实现这一目标所需的语言和运行时。客户端指定的查询:在GraphQL中,查询规范在_client_而不是_server_中编码。这些查询以字段级粒度指定。在绝大多数没有使用GraphQL编写的应用程序中,服务器确定在其各种脚本端点中返回的数据。GraphQL查询只返回客户请求的内容,其余不会返回。向后兼容性:在没有强制升级的部署本机移动应用程序的世界中,向后兼容性是一个挑战。例如,Facebook以两周为周期定期发布应用程序,并承诺至少将这些应用程序保留两年。这意味着每个平台在任何给定时间都有_至少_52个版本的客户端查询我们的服务器。客户指定的查询简化了我们向后兼容性保证的管理。StructuredArbitraryCode:字段级粒度的查询语言往往直接查询存储引擎,比如SQL。GraphQL在服务器上强加了一个结构并公开了支持字段。这允许服务器端的灵活性和跨应用程序整个表面的统一、强大的API。应用层协议:GraphQL是应用层协议,不需要特定的传输。它是由服务器解析和解释的字符串。强类型:GraphQL是强类型的。给定一个查询,工具可以确保查询在执行之前(即在开发时)在语法上正确且在GraphQL类型的系统中有效,并且服务器可以对响应的结构和类型做出某些保证。这使得构建高质量的客户端工具变得更加容易。自省:GraphQL自省。客户端和工具可以使用GraphQL语法本身来查询类型系统。这是一个用于构建工具和客户端软件的强大平台,例如自动将传入数据解析为强类型接口的能力。它在Swift、Objective-C和Java等静态类型语言中特别有用,因为它消除了将原始非类型化JSON适配为强类型业务对象的重复且容易出错的代码的需要。文档:GraphQL文档始终与代码同步,开发者无需维护分散在多处的文档,调用者无需担心过期问题,并且基于类型系统和graphql-tools的强大支持,mocking会变得异常轻松。参考资源:GraphQL简介