GraphQL是一种用于Web APIs的查询语言,由Facebook在2012年提出。它不同于传统的RESTful API,使用GraphQL API 可以自定义获取数据的格式,以及减少API请求的数量。GraphQL是表述性API语言,它允许客户端指定想要从服务器请求的数据,并以准确的方式返回请求的数据,从而大大优化了网络传输。在本文中,我们将对GraphQL进行详细阐述,包括其基本概念和使用示例。
基本概念
查询(Query)
在GraphQL中,查询(Query)是获取数据的方式。查询通过指定想要检索的字段或对象定义查询的精确内容。查询可以是一个或多个嵌套字段或对象。例如,用于获取用户信息的查询可以是这样的:
----- - -------- ---- - ---- ----- ----- - ----- ---- -------- - ---- - - - -
上述查询将返回具有指定ID的用户的所有信息,包括他们的名称、电子邮件、所有发布过的帖子及其评论。
变量(Variable)
GraphQL还允许声明可被查询中任何地方使用的变量,类似于JavaScript中的变量。变量使我们可以在从客户端发送的查询中参数化输入值。例如,我们可以对用户ID进行变量化,从而在多个查询中实现代码共享:
----- ---------------- ---- - -------- ---- - ---- ----- - -
操作(Operation)
GraphQL允许在一个请求中执行多个查询,变量和其他相关操作。这些操作可以是查询(Query), 多个查询(Query),变异(Mutation)和订阅(Subscription)。多个操作可以在单个请求中执行,使查询变得更高效。例如:
----- ------------ - -------- ---- - ---- ----- - ------------- ---- - ----- ---- - -
GraphQL与RESTful API的比较
GraphQL使API更具灵活性,因为它允许客户端决定需要什么数据。这与传统的RESTful API形成了对比,后者必须在服务器端提前定义数据集。这意味着,RESTful API消耗的网络资源多于GraphQL,因为客户端必须处理不必要的数据。
虽然RESTful API常常将所有相关数据都发送到客户端,而GraphQL允许客户端准确请求所需数据,它并不适用于所有的应用程序。依赖于内存缓存和其他优化策略的传统RESTful API可能比GraphQL更具优势。
示例代码
服务端实现
这里是使用GraphQL进行用户查询的服务端(使用Node.js, Express 和 Apollo 服务器):
----- - ------------- --- - - --------------------------------- ----- ------- - ------------------- -- ------ --- ----- - - - --- ---- ----- ------ ------ ------------------ ------ - - ------ -------- -------------- ----- ----- -- - ------ ----- ------- -------- --------- - - ----- ------- --- ---------- -- -- -- -- -- -- -- --------- ------ ----- -------- - ---- ---- ----- - ------ -------- -------- ----- ---- - ---- ---- - --- --- ----- ------- ------ ------- ------ -------- - ---- ---- - --- --- ------ ------- ----- ------- --------- ----------- - ---- ------- - --- --- ----- ------- - -- -- --------- -------- ----- --------- - - ------ - ------ -- -- ------ ----- -------- ----- -- ----------------- -- ------- --- --------- -- -- -- -------- ------ ----- ------ - --- -------------- --------- ---------- --- -- --------- --- ----- --- - ---------- -- ------- ---------------- --- ------------------------ --- --- -- ---- ------------ ----- ---- -- -- -- ------------------- ----- -- -------------------------------------------- --
客户端实现
下面是使用GraphQL API的客户端查询示例(使用Apollo Client):
------ - ------------- -------------- --- - ---- ----------------- -- ----- ----- ------ - --- -------------- ---- -------------------------------- ------ --- ---------------- --- -- ---- ----- -------- - ---- ----- ---------------- ---- - -------- ---- - ---- ----- ----- - ----- ---- -------- - ---- - - - - -- -- ---- ------ -------- ------ --------- ---------- - --- --- -- -- -------------- -- ---------------------
上述代码将查询代码发送到GraphQL服务器,以获取具有指定ID的用户的数据。用户数据将包括名称、电子邮件、所有发表过的帖子及其评论。
总结
GraphQL是现代API设计的一种非常有用的工具,它允许客户端指定他们想要的数据,并准确地获得所需的数据。它是API优化的一种关键工具,可以减少网络请求,提高应用程序的性能。 在开始使用GraphQL之前,我们必须深入了解其基本概念和实现方式。希望这篇文章对使用GraphQL的开发人员有所帮助。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64e09eddf6b2d6eab3bbe6cc