随着现代 Web 应用程序的日益复杂,传统的 REST API 在满足应用程序需求方面已经变得越来越不够用了。GraphQL 是一种新的 Web API 操作语言,旨在解决 REST API 中出现的问题,例如网络请求次数、数据的过度获取和不必要的响应等。本文将介绍如何在现代 Web 应用程序中使用 GraphQL 构建 API,并与传统的 REST API 进行比较。
REST API 介绍
REST (Representational State Transfer) 是一种描述如何建立 Web 服务的架构风格,通常是使用 HTTP 协议。REST API 公开了在 Web 服务器或云中托管的资源,并允许客户端使用 GET、POST、PUT、DELETE 等 HTTP 方法来操作数据。例如,当您访问图书馆 Web 站点时,您将看到可以查看、借阅或还书的资源。这些资源是图书馆 Web 服务器上的 API,REST API 就通过 HTTP 协议与客户端进行通信。
REST API 的限制
REST API 有一些限制,这使得它们在某些方面可能不理想,尤其是在现代应用程序中。以下是几个主要的问题:
过渡的数据获取
REST API 返回整个资源,而不能让客户端查询特定的值,导致客户端在使用时会不必要地获取太多数据,从而增加了网络负担。
多个请求
在使用 REST API 时,通常需要发起多个请求以获取所有需要的资源。例如,如果您需要获取一本新书及其作者的详细信息,则需要发出两个独立的请求,这会影响性能并增加网络负担。
版本冲突
当 REST API 发生的变化使客户端无法正常工作时,可能会发生版本冲突。这会导致客户端数据丢失或应用程序崩溃。
没有强制完整性
REST API 没有足够的机制来保证客户端请求的完整性。这意味着客户端要么获取到了预期之外的数据,要么过滤了一些数据,而服务器端却不知道。
GraphQL 介绍
GraphQL 是一种由 Facebook 发明的 Web API 操作语言,它可以帮助客户端精确查询需要的数据。与 REST API 不同,GraphQL 的目标是提供一个灵活且可扩展的 API,以便客户端可以轻松地选择要获取的数据。使用 GraphQL,客户端只需要发起一次请求即可获取它所需的所有数据。
GraphQL 如何工作
GraphQL 使用了一个特定的查询语言,在客户端和服务器之间直接通信。这个查询语言允许客户端精确地查询所需的数据,而无需获取整个资源。例如,如果你需要查询一本新书和它的作者,你可以在一个请求中获取到对应的数据,如下所示:
- -------- ---- - ----- ------ - ---- - - -
这个查询将包含以下信息:
- 客户端正在请求“book”资源
- 请求的特定“book” ID 是“123”
- 这个客户端需要“book”标题和作者名称。
GraphQL 数遍历这个查询并返回结果,结果只包含客户端查询时所需的数据。
除了查询之外,GraphQL 还包括突变(用于修改数据)和订阅(用于实时更新)等功能。
GraphQL 带来的好处
与 REST API 相比,GraphQL 有许多优点:
灵活性
GraphQL 使用一种强大的查询语言,允许客户端查询所需的精确数据,而无需获取整个资源。这使得开发人员能够构建灵活且可扩展的 API,满足大多数应用程序需求,而不仅仅是针对特定场景构建的专用 API。
性能
GraphQL 可以减少客户端流量和请求数量,从而提高性能。客户端只需要发起一次请求,请求数据可以在单个请求中获取,这就减少了网络负担和 API 响应时间。
版本控制
GraphQL 的版本化方案非常简单,通过使用不同的查询来针对不同的客户端版本,不必像 REST API 那样维护多个 API 版本。
数据完整性
GraphQL 引入了强制完整性,这可以确保客户端只请求可用的字段和参数。当不完整的查询被发现时,GraphQL 将返回一个错误消息以指导客户端。
GraphQL 示例
以下是一个简单的例子,这个例子使用一个 REST API 和同一个 GraphQL API 来获取图书和作者信息。
REST API
假设我们有一个 REST API,可以返回包含书和作者信息的 JSON 数据。
--- ---------- - -------- ---- ----- -------- --------- - ----- ------ ------- --- ----- ------------ ------------ ---------- --- ----- - - --- ------------ - ------- --- ----- ------------ ------------ ---------- --- ------ -------- - - ----- ------ -------- ---- ----- ------- - - -
在这个例子中,我们可以通过两个单独的请求获取图书和作者信息,但我们需要发起两个请求。
GraphQL API
现在我们来看看相同的数据,但是这次我们将使用一个 GraphQL API 来获取数据,而不是 REST API。
我们可以构建一个 GraphQL API,该 API 可以为客户端提供所需的信息,如下所示:
----- ------- - -------- ------ - ----- ------ - ---- - - - ----- --------- - ---------- ------ - ---- ----- - ----- - - -
在这个例子中,我们只需要发起一个请求,就可以获取所需的图书和作者信息。我们只查询所需的数据,而不是返回整个资源,这可以减少客户端流量和请求数量,从而提高性能。
结论
REST API 和 GraphQL 都可以用于 Web 应用程序中,但它们有不同的优缺点。REST API 是一种传统且成熟的方法,使用 HTTP 协议传输数据。GraphQL 是一种新的 Web API 操作语言,可以更灵活、更精确地获取数据。
在现代 Web 应用程序中,GraphQL 的灵活性和性能使其成为更好的选择。它可以减少客户端流量和请求数量,提高性能,并且可以让客户端查询特定的值。通过使用 GraphQL,开发人员可以构建灵活、可扩展和高效的 API,满足现代应用程序的需求。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671f2c2e2e7021665efc17d7