GraphQL 是 Facebook 推出的一种 API 查询语言及其解析器,可让客户端只请求所需的数据,并返回同构且可预测的结果,从而解决了传统 REST 风格的一些缺点。
传统 REST 的缺点
在传统 REST API 中,每个端点通常返回一个固定的响应结构,这意味着客户端必须发起多个请求才能获取所需的数据。这种不必要的网络延迟会影响应用程序的性能。此外,如果需要扩展或更改 API 的数据结构,则必须更新客户端代码。
GraphQL 的优点
GraphQL 通过一种声明性的方式定义 API 的数据结构,从而使客户端能够提出精确的查询。客户端可以指定所需的字段、关系和数据量,并且只返回必要的数据。这通常可以减少 HTTP 请求数并提高性能。
另一个优点是版本控制。由于 GraphQL 定义了 API 的数据结构,因此可以在不中断现有客户端的情况下更改和添加字段。
构建 GraphQL API
在构建 GraphQL API 时,必须定义模式以及解析器。模式定义了可用的类型,字段和关系,而解析器则定义了如何处理查询和更改。以下是一个简单的例子:
-- -------------------- ---- ------- ---- ------ - ----- ------- ----- ------- ---- ---- ------ --------- - ---- ----- - ----- ---- ------- ---- -------- ---- - ---- ----- - -------- ---------- ------------ --------- ------ - ---- -------- - --------------- -------- ----- -------- ---- ------ ------- -
在这个例子中,我们定义了两个类型:Player
和 Stats
。我们还定义了查询和变异模式。查询模式定义了我们可以在客户端请求的操作,而变异模式定义了我们可以在服务器端执行的操作。在这个例子中,我们可以通过 players
查询来检索所有玩家,或者通过 player
查询来检索特定名称的玩家。
接下来,我们定义了一个 addPlayer
变异,它可以用于添加新的球员到数据库中。
要实现这个模式,我们需要创建解析器。由于我们使用 GraphQL 作为 API 查询语言,我们必须定义如何解释查询和变异。以下是一个示例解析器:
-- -------------------- ---- ------- ----- --------- - - ------ - -------- -- -- ---------------- ------- ------ - ---- -- -- ------------------------ -- --------- - ---------- ------ - ----- ----- --- -- -- -------------- ----- ----- --- -- -- ------- - ------ ------ -- ------------------------- - -
在这个示例解析器中,我们通过调用 db
对象上的方法来解析查询。即使我们在查询中需求的数据结构与我们在数据库中存储的数据结构不同,我们仍可以定义 Player
类型和 stats
字段,从而使我们的 API 更加直观和易于使用。
结论
通过使用 GraphQL 构建 API,我们可以让客户端快速地获取所需的数据,从而提高应用程序性能。它还允许我们在可能不兼容或更改数据库结构的情况下改变 API 的结构,而无需修改现有客户端代码。
总之,GraphQL 是一种优秀且强大的技术,在开发现代 Web 应用程序时非常有用。建议我们尝试使用 GraphQL 构建下一个 Web 应用程序,将您的开发工作推向全新的高度!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6771f2476d66e0f9aad317e3