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
对象来访问我们的数据源。最后,我们将数据源传递给 ApolloServer
的 dataSources
选项,以便 Apollo Server 可以将其注入到上下文中。
处理 REST API 的分页
许多 REST API 使用分页来返回大量数据。在 GraphQL 中,我们可以使用游标分页或基于偏移量的分页来处理分页。以下是一个使用游标分页的示例:
-- -------------------- ---- ------- ----- - -------------- - - ---------------------------------- ----- ---------------- ------- -------------- - ----- ---------- ------ ----- -- - ----- -------- - ----- ------------------ - ------ ----- --- ----- ----- - --------------- ----- ------ - ---------------- ------ - ------- -------- ------------ --- ------ ------ -- - - ----- --------- - - ------ - ------ ----- --- - ------ ----- -- - ----------- -- -- - ----- - ------- -------- ----- - - ----- -------------------------------- ------ ----- --- ------ - ------- -------- ------ -- -- -- -- ----- ------ - --- -------------- --------- ---------- ------------ -- -- -- ---------- --- ------------------- --- ---
在这个示例中,我们的 getPosts
方法接受一个 after
游标和一个 limit
来指定要返回的帖子的数量。它从 REST API 中获取帖子,然后返回一个包含帖子、游标和指示是否有更多帖子的布尔值的对象。
在 resolvers
中,我们定义了一个查询 posts
,它使用 dataSources
对象来访问我们的数据源。最后,我们将数据源传递给 ApolloServer
的 dataSources
选项,以便 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