在传统的 RESTful 架构中,为了获取前端所需的数据,需要向后端发出多个请求,这不仅浪费了带宽,同时也给服务器带来了压力。而 GraphQL 则通过优化数据传输的方式解决了这一问题,它的主要思想就是客户端可以向服务器直接请求所需数据的具体内容和格式,减少了不必要的响应数据,提高了 API 性能。
GraphQL 是什么
Graphql 是一种由 Facebook 开发的一种用于 API 查询语言的开源技术。它通过提供一个强大的 API 查询语言来允许客户端指定需要从服务端获取的数据。它对于客户端来说,是一种单一端点(endpoint)的体验,客户端可以在单一请求中调用多种数据获取请求,最终获得所需的数据。
该查询语言有以下几个关键点:
- 查询(Query):客户端能够指定需要从服务端获取的数据,而不是服务端强制地一次性返回所有的数据。
- 变更(Mutation):客户端能够通过 Graphql 发送并修改服务端数据,与查询一样,它需要指定需要修改的属性和规则。
- 订阅(Subscription):客户端可以订阅服务端的数据变化,一旦服务端数据有了变化,服务端就会发送数据给客户端。
GraphQL 的优势
相对于传统的 RESTful 架构,GraphQL 的优势有以下一些:
使 API 轻松地适应客户端需求:Graphql 可以根据客户端需要获得的数据和字段,动态生成一个查询计划。这非常方便,因为客户端可以定义自己所需的接口,不需要因特定请求创建额外的数据获取接口。
支持多种数据源(Sources of data):服务端可以从任意的数据源获取数据,例如 SQL 数据库、NoSQL 数据库、第三方 API、文本文件等等,因为 GraphQL 可以处理不同数据源的数据请求。
避免了“过度获取”(Over-fetching)和“欠获取”(Under-fetching):在传统的 RESTful 架构中,可能情况下,客户端需要从多个 API 端点获取数据。这会导致所谓的“过度获取”问题,因为客户端需要获得远多于实际需要的数据,服务端则通常会返回重复的数据。相对的,“欠获取”则是指 API 端点不能提供客户所需的所有数据,这会导致客户端需要使用不同的端点弥补这些缺失。使用 GraphQL, 客户端可以告诉后台需要的 API 端点在一个请求中,避免了这种问题。
支持分布式查询:GraphQL 支持使用分布式查询,这意味着你可以向多个外部 API 端点发送请求,在同一个查询中获取数据。
GraphQL 的示例代码
Graphql 像是一种查询语言,它跟我们熟知的 SQL 有很多相似之处。不过,它主要用于网络 API 的请求。以下是一个示例代码:
-- -------------------- ---- ------- ----- --------------- - ------------ ------ - ---- ----- ---------- - ---- - - -
这个查询将会返回以下结果:
-- -------------------- ---- ------- - ------- - ----------- - ------- ----- ----- -------- ------- ---------- ------------- - ------- ---- - - - -
总结
GraphQL 是一种非常强大的查询语言,它可以帮助前端通过一次请求获取大量数据,降低了 API 压力。同时,GraphQL 完全在服务端控制之下,可以确保在任何情况下都始终能够提供所需的数据。想要减轻 API 压力,并提高性能,GraphQL 绝对是一个值得学习的技术。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ae209148841e9894a1c615