随着前端技术不断发展,RESTful API 和 GraphQL 都已经成为了常用的 API 设计方式。RESTful API 风格简单方便,但有时返回的数据结构不够灵活,需要进行多次请求才能获取到需要的数据。而 GraphQL 在返回数据时非常灵活,能够只返回需要的部分数据,节省了网络流量和带宽,但需要对后端进行修改以支持其查询语法。
在实际开发中,我们可能需要同时使用 RESTful API 和 GraphQL。那么如何在 GraphQL 中调用 RESTful API 呢?本文将详细介绍如何完美解决这个问题。
问题分析
首先,我们需要知道 GraphQL 是如何工作的。GraphQL 的查询语法需要在服务器端进行解析,然后向客户端返回对应的数据。而 RESTful API 的数据结构已经自包含了每个 API 的方法和指令,可以直接在客户端调用。因此,我们需要使用一个工具,将 RESTful API 的数据结构转化为 GraphQL 的查询语句,再进行调用。
解决方案
根据上述问题分析,我们可以使用两种方式来解决这个问题:
- 使用 ApolloLinkREST 实现对 RESTful API 的调用
- 使用 graphql-zeus 自动生成 RESTful API 的 GraphQL Schema
使用 ApolloLinkREST
ApolloLinkREST 是一个用于连接 GraphQL 和 RESTful API 的库。它不仅支持 RESTful API 的查询,还能处理请求和响应的错误和网络状态。有了 ApolloLinkREST,你可以使用 GraphQL 查询语法调用 RESTful API,同时也可以实现进一步的数据组织和转化。
以下是使用 ApolloLinkREST 的代码示例:
-- -------------------- ---- ------- ------ - ------------ - ---- ---------------- ------ - ---------- - ---- -------------- ------ - -------------- - ---- ------------------- ------ - ------------- - ---- ------------------------ ----- -------- - ---------------- ---- -------------------------- --- ----- -------- - --- ---------- ---- ------------------------------ --- ----- ------ - --- -------------- ----- -------------------------- ----------- ------ --- --------------- --- ----- -------- - ---- ----- - ---- ----------- ------- ----- -------- - -- ---- ----- - - -- -------------- ------ -------- -------------- -- ---------------------
在这个代码示例中,我们创建了一个 ApolloLinkREST 实例(通过传递任何可选选项来自定义 REST 链接),然后将其连接到 GraphQL 客户端 HTTP 链路中。这时我们就可以像使用普通 GraphQL 查询一样使用 RESTful API,使用 @rest
指令来定义我们要执行的具体操作。
使用 graphql-zeus
graphql-zeus 是一个使用 RESTful API 自动构建 GraphQL 应用程序的库。使用它,你可以为 RESTful API 生成 GraphQL Schema,而不需要逐一手动编写。graphql-zeus 通过使用预定义的代码模板根据 RESTful API 的 URI 和 HTTP 操作自动生成 Schema 和类型定义。
以下是使用 graphql-zeus 自动生成 GraphQL Schema 的代码示例:
-- -------------------- ---- ------- ------ - --------- - ---- --------------- ----- ------ - ----------- --- ------- - -------- -------------------------- ---- ---- - --- --- ------ ------ -------- ------ - ------------- --------- ----- - ---------------- ---- ------ ----- ------ ------------- ------ ----- ---- ----- ------- -------- -------- ----- ---- ------------- ------ ----- -------- ----------------- -------- -------- --------- ---- ------------- ------- ----- ---- ----- ------- --------- -------- ------------ -------------- ---- ------ ------------ ---- ------------- ------ ----- -------- ----- ------- ---------- -------------- ----- ---- ------------- --------- ----- -------- - ----- --------- - --- --- ------ ------- -------- ------- - - --- --------------------
这段代码会根据 REST API 自动生成对应的 GraphQL Schema,你可以直接使用这个 Schema 开展 GraphQL 开发。
结论
在这篇文章中,我们介绍了如何完美解决 GraphQL 调用 RESTful API 的问题。通过使用 ApolloLinkREST 或 graphql-zeus,我们可以很方便地在 GraphQL 中使用 RESTful API。无论是前后端分离的开发模式还是想要在 GraphQL 中同时调用 RESTful API,我们都可以使用这些工具来优化我们的开发流程,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6776951f6d66e0f9aa263466