如何在 Swift 中使用 GraphQL
GraphQL 是一种用于构建 API 的查询语言,其语法类似于 JSON 和 JavaScript。它在前端开发中越来越受欢迎,可以提供更大的灵活性和可维护性。在本文中,我们将讨论如何在 Swift 中使用 GraphQL。
获取 GraphQL API 首先,我们需要获取一个 GraphQL API,以便可以开始请求数据。在这里,我们将使用 GitHub API v4 作为我们的示例。
安装 Apollo-ios Apollo-ios 是一个用于 Swift 的 GraphQL 客户端,可以帮助我们更轻松地发送 GraphQL 查询和获取响应。我们可以使用 CocoaPods 或 Carthage 安装它。
在终端中,使用以下命令安装 Apollo-ios:
pod 'Apollo-ios', '~> 0.47.2'
或者,如果您使用 Carthage,请使用以下命令:
github "apollographql/apollo-ios" "0.47.2"
- 定义 GraphQL 查询 现在我们已经有了 API 和客户端,我们需要为我们的查询定义一个 GraphQL 文档。GraphQL 查询文件有一个 .graphql 文件扩展名,其中包含要获取的数据的查询语句。
查找查询语句,我们可以使用 GraphiQL 工具(网址:https://developer.github.com/v4/explorer/)。我们可以在工具中输入查询,选择要获取数据的字段,然后生成查询语句。然后将查询语句复制到我们的 .graphql 文件中。
例如,以下是一个查询 GitHub 用户存储库的查询:
query { user(login: "USERNAME") { repositories(first: 10) { edges { node { name } } } } }
该查询将返回用户存储库的前10个节点的名称。
- 创建 ApolloClient 接下来,我们需要创建一个 ApolloClient 对象来将我们的查询发送到 API 并获得响应。
我们可以通过定义 Apollo HTTPNetworkTransport 传输对象来创建 ApolloClient。该传输对象需要一个 URL 地址,该地址是 API 的位置,以及一个实现 Cachable 协议的缓存对象。
在我们的代码中,我们可以使用以下代码创建 ApolloClient:
let url = URL(string: "https://api.github.com/graphql")! let cache = InMemoryNormalizedCache() let transport = HTTPNetworkTransport(url: url) let client = ApolloClient(networkTransport: transport, cache: cache)
此代码将创建一个指向 GitHub GraphQL API 的 ApolloClient 对象。
- 发送 GraphQL 查询 现在我们已经有了 ApolloClient 对象和一个定义的 GraphQL 查询,我们可以使用 ApolloClient 的 fetch 方法执行查询。
我们可以指定我们的查询,以及变量的值(如果有),并在回调中获取响应。
例如,以下代码将发送我们之前定义的查询:
client.fetch(query: UserRepositoryQuery(users: "USERNAME"), cachePolicy: .fetchIgnoringCacheData) { result in switch result { case .success(let graphQLResult): print(graphQLResult) case .failure(let error): print("GraphQL Error: (error)") } }
此代码将打印查询返回的结果。
- 处理 GraphQL 响应 最后,我们需要处理我们的 GraphQL 响应。
ApolloClient 将响应作为 GraphQLResult 对象返回。该对象具有 data 属性,其中包含响应数据。如果发生错误,则错误将返回。我们可以自由地将响应数据转换为我们需要的格式。
例如,以下代码将处理我们的查询响应,并将其打印在控制台上:
client.fetch(query: UserRepositoryQuery(user: "USERNAME"), cachePolicy: .fetchIgnoringCacheData) { result in switch result { case .success(let graphQLResult): if let data = graphQLResult.data { let repositories = data.user.repositories.edges.map { $0.node.name } print(repositories) // 打印用户存储库名称的数组 } case .failure(let error): print("GraphQL Error: (error)") } }
结论
本文介绍了如何在 Swift 中使用 Apollo-ios 客户端发送 GraphQL 查询。我们了解了如何定义 GraphQL 查询文档,并使用 ApolloClient 转换和处理响应。使用这些技术,我们可以更轻松地使用 GraphQL 构建强大的 API,并在 Swift 应用程序中使用它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f27fd4a44b36ee57661eea