在前端开发中,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 的简单实现。
-- -------------------- ---- ------- ----- - ----------- - - --------------------------- ----- - ----------- - - ------------------- ----- ------ - ------------- ---- ----- - ------ -------- - ---- ----- --- --- ------ ------- ------- ------- ------------ ------- - --- ----- ---- - - - --- ---- ------ ---- ----- -------- ------- --- ----- ------------ ------------ ---- ----- ---------- -- --- ---- ---------- ------- ------ --- ----- ------ -- - --- ---- ------ --- ---- - ------------- ------- ------- ----- ------------ ---- ---- --- ---------- --- ------- ----- -- ----- ------------ -- --- ------- --- --------- --- -- ----- ---- -------- ---- --- -------- -- ------------ --------- - ------------------------------------------------------------------------------ -------- ------------------------------------------------------------------------------------------------------------------------