在 GraphQL 中使用现有的 REST API

阅读时长 7 分钟读完

GraphQL 是一种查询语言和运行时环境,用于构建 API。它提供了一种更加灵活和高效的方式来查询和修改数据。与传统的 REST API 不同,GraphQL 允许客户端指定其需要的数据,从而减少了不必要的数据传输和处理。

然而,许多现有的应用程序都使用 REST API 来提供数据。在这种情况下,如何将这些现有的 REST API 集成到 GraphQL 中呢?本文将介绍如何使用 GraphQL 中的现有 REST API,并提供详细的指导和示例代码。

使用 GraphQL 的 REST 数据源

GraphQL 提供了一种称为“数据源”的机制,用于将现有的 REST API 集成到 GraphQL 中。数据源是一个可以将 REST API 映射到 GraphQL 查询的函数。它接受一个对象参数,该对象指定 GraphQL 查询中需要的参数,并返回一个 Promise,该 Promise 解析为 REST API 响应。

以下是一个使用数据源的示例:

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

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

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

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

在这个示例中,我们创建了一个名为 MyRESTDataSource 的类,它继承自 RESTDataSource。这个类定义了一个 getPost 方法,它使用 this.get 方法从 REST API 中获取帖子。

然后,我们在 resolvers 中定义了一个查询 post,它使用 dataSources 对象来访问我们的数据源。最后,我们将数据源传递给 ApolloServerdataSources 选项,以便 Apollo Server 可以将其注入到上下文中。

处理 REST API 的分页

许多 REST API 使用分页来返回大量数据。在 GraphQL 中,我们可以使用游标分页或基于偏移量的分页来处理分页。以下是一个使用游标分页的示例:

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

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

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

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

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

在这个示例中,我们的 getPosts 方法接受一个 after 游标和一个 limit 来指定要返回的帖子的数量。它从 REST API 中获取帖子,然后返回一个包含帖子、游标和指示是否有更多帖子的布尔值的对象。

resolvers 中,我们定义了一个查询 posts,它使用 dataSources 对象来访问我们的数据源。最后,我们将数据源传递给 ApolloServerdataSources 选项,以便 Apollo Server 可以将其注入到上下文中。

处理 REST API 的错误

在使用 REST API 时,错误处理是非常重要的。在 GraphQL 中,我们可以使用 ApolloError 类来处理错误。以下是一个处理 REST API 错误的示例:

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

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

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

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

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

在这个示例中,我们的 getPost 方法使用 try/catch 块来捕获 REST API 的错误。如果出现错误,它将抛出一个 ApolloError,其中包含原始错误和错误代码。

resolvers 中,我们使用 try/catch 块来捕获数据源中的错误。如果错误是一个 FETCH_ERROR,我们将抛出一个 ApolloError,否则我们将传递错误。

结论

在 GraphQL 中使用现有的 REST API 可以节省开发时间和成本,并提供更灵活和高效的 API。本文介绍了如何使用 GraphQL 的数据源机制来集成 REST API,并提供了详细的指导和示例代码。通过了解这些技术,您可以更有效地使用 GraphQL,提高您的开发效率和用户体验。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67664fd976af2b9a20f5b55f

纠错
反馈