GraphQL 是一种新兴的 API 技术,它提供了一种灵活和可扩展的方式来构建 API。相比传统的 RESTful API,GraphQL 具有更好的数据获取和管理功能,可以大大提高前端开发效率和用户体验。本文将介绍如何使用 GraphQL 构建灵活和可扩展的 API,并提供相关的示例代码。
什么是 GraphQL?
GraphQL 是一种数据查询和操作语言,由 Facebook 在 2012 年开发。它允许客户端指定要获取的数据的结构和格式,而不是由 API 决定。它的核心优势是提供了一种统一的、可组合的、强类型的查询语法,使得客户端可以快速查询到所需的精确数据。
GraphQL 的特点
以下是 GraphQL 的主要特点:
统一的查询语法:GraphQL 定义了一种统一的、可组合的查询语法,使得客户端可以以一种非常直观的方式获取所需的数据。
强类型:GraphQL 中的数据类型是显式的、静态的,并由架构定义。这减少了出错的可能性,增强了应用的健壮性和可维护性。
灵活的数据获取:GraphQL 允许客户端取回所需的精确数据,而不是整个文档,从而减少了不必要的带宽和延迟。客户端可以根据需要获取多个资源,或者在一个请求中获取所有资源。
可扩展:GraphQL 通过允许开发人员自定义复杂类型来提供强大的扩展性。因此,如果您需要添加新的字段或属性,只需向架构中添加它即可。
适应性:GraphQL 已经支持了几乎所有的后端语言和框架,包括但不限于 Node.js、Java、Ruby、Python 和 .NET,可以融合到各种不同的开发堆栈中。
如何构建 GraphQL API?
要构建 GraphQL API,首先需要定义一种呈现 API 响应的类型和结构的 Schema,然后使用该 Schema 来处理和响应客户端请求。
Schema 定义了可以查询的类型以及每个类型可以访问的所有字段。这些类型是架构中的核心概念。接下来,需要在架构中定义每个字段的解析器。字段解析器是一个函数,它从数据库、缓存、REST 服务等任何数据源中获取数据,并将其作为响应的一部分返回给客户端。
下面是一个简单的例子,展示了如何使用 GraphQL 和 Node.js 来构建一个 API:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- - ----------- - - ------------------- ----- ------ - ------------- ---- ----- - ------ ------ - --- ----- ---- - - ------ -- -- - ------ ------ -------- -- -- ----- --- - ---------- -------- ----------- ------------- ------- ------- ---------- ----- --------- ----- -- -- ---------------- -- -- ---------------- ------ -- --------------------------
在这个例子中,我们首先定义了一个 Schema,它有一个 Query 类型和一个 hello 字段。然后,我们使用一个根解析器对象指定该字段的处理程序。最后,我们使用 Express 库来创建一个新的应用程序,将 GraphQL 中间件添加到中间件栈中,并用端口 4000 启动。
当客户端发送一个 GraphQL 请求时,GraphQL HTTP 将其解析,并调用相应的字段解析器来获取所需的数据。在这个例子中,我们的解析器简单地返回字符串“Hello World!”。
如何查询 GraphQL API?
一次 GraphQL 查询由从 API 容器中请求的一组字段和关联的参数组成。客户端在一个 GraphQL 请求中指定需要查询的字段,以及它们的变量、类型和关系。然后,API 服务器返回精确的查询结果。
GraphQL 请求的语法类似于 JSON 对象,如下所示:
-- -------------------- ---- ------- - ------ ------ - --------- --------- - -------------- ------- ------- ------- ------------- ---------- -
每个请求中的字段由字段名称和可能的属性列表组成。如果一个属性返回一个函数或对象,则该属性变为子字段,该对象可能具有子字段等。
关于参数的处理与 REST API 类似,因此您可以将参数作为字段的值进行传递。在 GraphQL 中,可以接受具有可选默认值的参数,并将它们传递给您的解析器函数。
要发送 GraphQL 请求,可以使用像 fetch() 这样的网络请求库,或者使用各种不同的 GraphQL 客户端库,如 Apollo 或 Relay。
如何测试 GraphQL API?
为了测试 GraphQL API,您可以使用各种不同的工具,如 GraphQL Playground、GraphiQL 或者使用测试库和断言。GraphiQL 是一种内建的 GraphQL 开发工具,让您查看和测试架构的可视化。GraphQL Playground 是另一种交互式 GraphQL IDE,类似于 GraphiQL,但拥有更多的功能和可配置性。
以下是使用 Apollo Client 和 Jest 进行测试的示例代码:
-- -------------------- ---- ------- ----- - ------------- --- - - ------------------------- ----- - ---------------- - - --------------------------------- ----- -------- - ---- ---- ----- - ------ ------ - -- ----- --------- - - ------ - ------ -- -- ------ -------- -- -- ----- ------ - --- -------------- --------- ---------- --- ----- - ----- - - ------------------------- -------- ------- ----- -- -- - ----- - ---- - - ----- ------- ------ ------ - ----- --- --- --------------------------------- --------- ---
在这个示例中,我们创建一个 ApolloServer,发送一个简单的查询,并断言它的响应是否与预期相同。
结论
本文介绍了如何使用 GraphQL 构建灵活和可扩展的 API。通过明确定义 Schema 和字段解析器,GraphQL 允许前端开发人员快速构建出精确的 API,与此同时还具有更好的性能和可维护性。我们还提供了示例代码来说明如何实现和测试 GraphQL API。希望这篇文章能够帮助您深入了解 GraphQL,并开始构建灵活和可扩展的 API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6703988cd91dce0dc84bbc2b