前言
Web 开发已经成为了现代技术的基石,而 RESTful API 则是 Web 开发中最常见的技术之一,我们在日常的前后端协作中,都会与其有着千丝万缕的联系。
而随着 Web 技术的发展,GraphQL 作为一种新型的 API 技术也逐渐兴起。那么 GraphQL 是什么?它与 RESTful API 有何不同?如何使用 GraphQL 构建可扩展的 API?
本篇文章将从这些问题展开讲述,让你在使用 GraphQL 开发 API 时能够更加从容和高效。
GraphQL 简介
GraphQL 是一个由 Facebook 开发的 API 查询语言和运行时。它允许客户端明确地获取它需要的数据,而不是像 RESTful API 那样要求客户端根据服务器预定义的数据结构获取数据。
RESTful API 通过 HTTP 传输数据,采用固定数据格式来进行数据交互,通常只能获取完整的资源或特定的部分。这使得客户端在某些情况下会获取无用的数据,从而降低 API 性能。
GraphQL 则可以为每一个查询返回明确、固定的数据类型,客户端可以查询某个资源的特定字段。这样有效降低了数据传输量和获取无用数据的情况。
以下是 GraphQL 查询和 RESTful API 查询对比的示例:
GraphQL 查询
query { user(id: "123") { name email } }
RESTful API 查询
GET /user/123 HTTP/1.1 Host: example.com
GraphQL 与 RESTful API 的差异
GraphQL 相比 RESTful API 具有以下特点:
- 更灵活的数据获取
- 更少的数据传输
- 更少的 HTTP 请求
GraphQL 可以让客户端直接查询需要的数据,而 RESTful API 需要先从给定的 URL 中获取到完整的资源,然后通过解析数据来获取所需字段。
GraphQL 还通过单一端点提供消息传输,而 RESTful API 则需要在不同的 URL 上提供不同的资源。
安装 GraphQL
首先,我们需要在项目中安装 GraphQL。可以通过 NPM 或者 Yarn 进行安装,具体方式如下:
npm install graphql
或者
yarn add graphql
定义 GraphQL schema
GraphQL schema 定义了接口的类型,包括查询、变更和订阅。你需要编写用于定义 GraphQL schema 的代码,并实现查询、变更和订阅。
以下是一个简单的友链查询示例:
-- -------------------- ---- ------- ------ - ----------- - ---- --------- ----- ------ - ------------- ---- ---- - --- ---- ---- ------- ------------ ------- - ---- ----- - --------- ------ - --
编写 resolver
在 GraphQL 中,resolver 是实现查询、变更和订阅的函数。每一个查询或变更必须有一个 resolver 函数,用于获取数据或修改数据。
以下是一个简单的 resolver 示例:
-- -------------------- ---- ------- ----- --------- - - --------- -- -- - ------ - - --- -- ---- --------------------- ------------ ------- ------- -- - --- -- ---- ----------------------- ------------ --------- ------ -------- - - - -
配置 GraphQL API
最后,我们需要将 schema 和 resolver 配置为 GraphQL API。可以使用 GraphQL HTTP 服务器,如 express-graphql 来配置 GraphQL API。
以下是一个简单的 GraphQL API 配置示例:
-- -------------------- ---- ------- ------ ------- ---- --------- ------ ----------- ---- ----------------- ----- --- - --------- ------------------- ------------- ------- ---------- ---------- --------- ---- --- ---------------- -- -- ------------------------
GraphQL 示例
最后,我们来看一下 GraphQL 的查询示例:
query AllLinks { allLinks { id url description } }
这个查询将会返回所有的友链。
总结
本文简要介绍了 GraphQL 的概念和与 RESTful API 的差异,并详细讲解了如何使用 GraphQL 构建可扩展的 API。希望这篇文章能够对你在日常的开发中起到一定的指导作用。
如果你对 GraphQL 有什么疑问或者想要学习更多关于 GraphQL 的内容,可以参考以下官方教程:https://graphql.org/learn/
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6455f161968c7c53b09463fe