随着 Web 技术的不断发展和进步,RESTful API 也不再是 Web 开发中唯一的选择。GraphQL 作为一种新兴的 Web API 技术,已经被广泛使用。但是,与 RESTful API 相比,GraphQL 存在一些 “坑”,需要我们在使用时要格外注意。本文将从深度学习的角度,分析 GraphQL 的使用,希望对广大前端开发者有所帮助。
什么是 GraphQL
GraphQL 是一种由 Facebook 开源的 Web API 规范,它可以让客户端在请求时根据自己的需求,自由选择其需要展示的数据。也就是说,GraphQL 可以根据客户端的需求,精准地返回所需的数据,而且请求数据量非常小,大大减少响应时间及网络带宽。
与 RESTful API 相比,GraphQL 不必通过多次请求来实现获取所需数据的目的,因为 GraphQL 用一次 HTTP 请求来返回客户端所需的所有数据,这让我们更容易描述和理解数据模型。
GraphQL 与 RESTful API 的区别
GraphQL 和 RESTful API 对 Web 应用程序开发的方式有着本质的不同。下面将列举两者之间的区别。
GraphQL 与 RESTful API 的用途
RESTful API:适用于固定模式的 Web 应用程序,具有简单的 URL 结构,将资源的 CRUD 操作表示为 HTTP 方法。例如:GET、POST、PUT 和 DELETE 等。
GraphQL:适用于数据结构复杂、变化频繁的 Web 应用程序,将所有数据表示为图形结构,并根据客户端需求返回数据。客户端可以根据自己的需求,请求所需数据的字段和数据类型等。
请求方式
RESTful API:客户端可以使用各种 HTTP 方法请求数据,如 GET、POST、PUT 和 DELETE。
GraphQL:客户端只能使用 POST 方法请求数据。GraphQL 接受到请求后,根据请求的参数进行相应操作。
查询数据
RESTful API:固定的 URL 结构代表所请求的数据。RESTful API 不支持选择性地返回数据,而且每次请求的数据都是固定的。
GraphQL:客户端可以精确地指定返回的数据类型和字段等,这使得 GraphQL 更加灵活,快速且易于理解。
GraphQL 的优点
与 RESTful API 相比,GraphQL 有以下优点:
- 精准地获取所需的数据,减少数据传输量。
- 更好的版本控制。
- 更易于理解和使用,不需要考虑 RESTful URL 的复杂结构。
- 可以支持前端所需的数据类型和字段等。
GraphQL 的缺点和注意事项
缺点
GraphQL 的缺点主要体现在以下几个方面:
- 学习成本较高。GraphQL 需要更深入的学习才能够使用。
- 系统复杂度增加。因为所有请求都需要在服务器上执行,所以系统复杂度有一定的提高。
注意事项
在使用 GraphQL 时,我们需要注意以下几点:
准确定义查询过程:GraphQL 查询中发生的任何更改都会影响到整个应用程序,所以在编写查询时,务必要准确定义需要返回的数据。
使用合理的查询方案:GraphQL 应该根据业务模型来合理的定义合并查询。合并查询可以减少网络交互次数,加快响应速度。
兼容性:有些现有库不支持 GraphQL,因此,如果我们打算使用 GraphQL,我们需要在系统中进行相应的升级和修改。
下面,我们还提供了一些 GraphQL 的示例代码。如果你正在学习 GraphQL,这些示例代码可能会对你有所帮助。
GraphQL 示例代码
查询数据
query { movie(id: "123") { title releaseYear } }
向服务器请求从电影集合重获取 ID 为 123 的电影的标题和发布年份。
过滤数据
query { movies(filter: {releaseYear: 2019}) { id title poster } }
向服务器请求在电影集合中过滤发布年份为 2019 的所有电影 ID、标题和海报。
合并多个查询
-- -------------------- ---- ------- ----- - ------- --------- ------ - ----- ----------- - ------- --------- ------ - ----- ----------- - -
在一个 GraphQL 请求中,查询多个电影的信息。
将多个查询作为参数传递
-- -------------------- ---- ------- ----- - ------ ---- ------ - ---- ------- - ------- -------------- ------------- - ----- - - - -
向服务器请求影院 ID 为 123 的影院名称和屏幕信息,每个屏幕上播放的电影在指定日期。
总结
GraphQL 与 RESTful API 相比,具有更多的优点,如能精准地获取所需的数据、更好的版本管理等。但是,GraphQL 也有一定的缺点,需要根据业务场景来特定使用。本文希望能帮助广大前端开发者更好地了解GraphQL 的使用方法,并避免使用过程中的一些坑。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c545e3d20074f47a460c43