GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、更强大的方式来获取和修改数据。然而,有时候我们需要从已有的 REST API 中获取数据,这时候该怎么办呢?本文将介绍如何在 GraphQL 中使用 REST API 进行数据获取的解决方案。
问题
假设我们有一个 REST API,它能够返回一些 JSON 数据,例如:
{ "id": 1, "name": "John Doe", "email": "john.doe@example.com" }
我们想要在 GraphQL 中获取这个数据,我们可以这样写一个 GraphQL 查询:
query { user { id name email } }
但是,我们无法直接在 GraphQL 中调用这个 REST API,因为 GraphQL 和 REST API 是两种不同的技术。那么,该怎么办呢?
解决方案
我们可以使用 GraphQL resolver 来解决这个问题。GraphQL resolver 是一个函数,它能够将 GraphQL 查询映射到实际的数据源。我们可以编写一个 resolver 函数来调用 REST API 并返回数据。
下面是一个示例 resolver 函数:
// javascriptcn.com 代码示例 const fetch = require('node-fetch'); const API_URL = 'https://example.com/api'; const resolvers = { Query: { user: async () => { const response = await fetch(`${API_URL}/user`); const data = await response.json(); return data; }, }, };
在这个示例中,我们使用了 node-fetch 库来发起 HTTP 请求。我们首先定义了 REST API 的 URL,然后在 resolver 函数中使用 fetch
函数来获取数据,最后将数据返回。
我们还需要将这个 resolver 函数注册到 GraphQL schema 中,例如:
// javascriptcn.com 代码示例 const { makeExecutableSchema } = require('graphql-tools'); const typeDefs = ` type User { id: Int name: String email: String } type Query { user: User } `; const schema = makeExecutableSchema({ typeDefs, resolvers, });
在这个示例中,我们定义了一个 User
类型和一个 Query
类型,然后将 resolver 函数注册到 Query
类型中。
现在,我们就可以在 GraphQL 中使用这个 resolver 函数了,例如:
query { user { id name email } }
总结
在使用 GraphQL 进行数据获取时,有时候我们需要从已有的 REST API 中获取数据。通过编写 resolver 函数,我们可以将 GraphQL 查询映射到实际的数据源,并返回数据。本文介绍了如何在 GraphQL 中使用 REST API 进行数据获取的解决方案,并提供了示例代码。希望本文能够对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65123ee295b1f8cacdaaa2f5