为什么 GraphQL 使我曾经拒绝的 RESTful API 显得如此过时?

阅读时长 4 分钟读完

在前端开发中,API 是不可或缺的一部分。而在选择使用 RESTful API 还是 GraphQL API 上,我曾经对后者持怀疑态度。但现在,在使用 GraphQL 后,我意识到 RESTful API 已经过时了。

何为 RESTful API?

RESTful API 全称是“Representational State Transfer”,即“表现层状态转移”。它以一个 URL 为资源定位符并支持 HTTP 协议的 GET、PUT、POST 和 DELETE 方法来表示资源的状态变化。

RESTful API 被广泛应用于 web 应用程序和移动应用程序后端开发,因为它允许客户端访问和修改服务器端的资源。但 RESTful API 也存在一些问题。

  • 粒度过大:每个请求返回完整的资源内容,造成无法控制冗余数据传输。
  • 接口难扩展:当需要额外的字段或关系时,必须重新设计和分配 API 端点。
  • 多个请求限制性能:对于复杂的数据查询,需要多次交互,降低了性能。

GraphQL 是什么?

GraphQL 是一个由 Facebook 开发的查询语言和运行时环境系统,旨在解决 RESTful API 的这些问题。使用 GraphQL,强类型查询可以明确指定所需的数据结构,减少了无用信息的传输并允许在一个请求中获取多种数据类型。

GraphQL API 的优点

相比 RESTful API,GraphQL API 有以下优点:

粒度更细

GraphQL 允许开发人员自定义所需的字段和关系,不会返回冗余数据,可以最大程度上减少网络延迟和带宽占用。

按需查询

GraphQL 让客户端能够指定需要哪些资源,并能够通过链接关系一次获得所有必要的数据,而不是进行多个请求。这增强了前端与后端之间的耦合性。

数据类型强制

GraphQL 强制数据类型,可以避免类型不统一的问题。并且使用 GraphQL 的 IDE 可以提供代码自动完成和主动提示等开发体验。

容易扩展

使用 GraphQL,我们可以通过调整查询来获取新的数据或字段,而不需要重新设计和分配 API 端点。同时 GraphQL 还支持版本控制,保证每个应用都使用正确的 schema 版本。

总结

选择 REST 或者 GraphQL,很大程度上取决于你的项目需求和团队约定。但作为前端工程师,在开发方面,如果你想要更好的性能和灵活性,以及更佳的开发体验和生产效率,那么值得花时间学习和使用 GraphQL。

在下面的代码示例中,我们使用了 Node.js 和 Express 为前端应用程序提供 GraphQL API 的简单实现。

-- -------------------- ---- -------
----- - ----------- - - ---------------------------
----- - ----------- - - -------------------

----- ------ - -------------
  ---- ----- -
    ------ --------
  -

  ---- -----
    --- ---
    ------ -------
    ------- -------
    ------------ -------
  -
---

----- ---- - -
  -
    --- ----
    ------ ---- ----- --------
    ------- --- ----- ------------
    ------------
      ---- ----- ---------- -- --- ---- ---------- ------- ------ --- ----- ------
  --
  -
    --- ----
    ------ --- ---- - -------------
    ------- ------- -----
    ------------
      ---- ---- --- ---------- --- ------- ----- -- ----- ------------ -- --- ------- --- --------- --- -- ----- ---- -------- ---- --- -------- -- ------------ ---------

- ------------------------------------------------------------------------------ --------
------------------------------------------------------------------------------------------------------------------------
纠错
反馈