Graphus 是一个强大且强类型、纯 Swift 的 GraphQL 客户端,适用于 iOS。它允许您根据模型构建 GraphQL 请求。如果您喜欢这个项目,请不要忘记给它 星级 ★
写作过程中的文档
如果您有任何问题,可以给我发邮件到 [email protected] 或通过 telegram。
导航
快速示例
// Make simple model
struct Author: Decodable, Queryable {
var firstName: String
var secondName: String
static func buildQuery(with builder: QueryBuilder) {
let query = builder.query(keyedBy: CodingKeys.self)
query.addField(.firstName)
query.addField(.secondName)
}
}
// Create query for retriving authors list
let authorsQuery = Query("authors", model: Author.self)
// Send request to the server & map response
self.client.request(authorsQuery).send(mapToDecodable: [Author].self) { (result) in
switch result {
case .success(let response):
print("Authors", response.data)
print("GraphQL errors", response.errors)
case .failure(let error):
print("Job failed: \(error.localizedDescription)")
}
}
特点
- 根据您的模型构建 GraphQL 请求。
- 向每个字段添加任何参数。
- 突变请求
- 支持 GraphQL 分页
- 使用 Codable 协议进行响应映射
- [待办] ObjectMapper 支持
需求
Swift 4.2 或 5.0。适用于 iOS 10+
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 Graphus
集成到您的 Xcode 项目中,在您的 Podfile
中指定它。
pod 'Graphus' # Without mapping
pod 'Graphus/Codable' # Codable mapping support (recommended)
Carthage
Carthage 是一个去中心化的依赖管理器,它构建您的依赖并提供二进制框架。要使用 Carthage 将 Graphus
集成到您的 Xcode 项目中,在您的 Cartfile
中指定它。
github "ilia3546/Graphus"
手动
如果您不希望使用上述任何依赖管理器,则可以手动将 Graphus
集成到项目中。将 源
文件夹放入您的 Xcode 项目中。确保启用 当需要时复制项
和 创建组
。
使用方法
基础知识
要构建基于您的类或结构的请求数据,只需实现 Queryable 协议,该协议包括以下静态函数
static func buildQuery(with builder: QueryBuilder)
Graphus 使用 QueryBuilder
对象来添加字段和子模型
struct Book: Queryable {
var title: String
var isbn: String
static func buildQuery(with builder: QueryBuilder) {
let query = builder.query()
query.addField("title")
query.addField("isbn")
}
}
此外,如果您的模型实现了 Decodable 协议并且您使用了 Codable 集成,您还可以通过 CodingKeys 创建查询
static func buildQuery(with builder: QueryBuilder) {
let query = builder.query(keyedBy: CodingKeys.self)
query.addField(.title)
query.addField(.isbn)
}
上面的例子将生成以下 GraphQL 请求模型
{
title,
isbn
}
添加子模型
您可以将子模型添加到 GraphQL 请求数据中
struct Author: Decodable, Queryable {
var firstName: String
var secondName: String
var books: [Book]
static func buildQuery(with builder: QueryBuilder) {
let query = builder.query(keyedBy: CodingKeys.self)
query.addField(.firstName)
query.addField(.secondName)
query.addChild(Book.self, forKey: .books)
}
}
上面的例子将生成以下 GraphQL 请求模型
{
firstName,
secondName,
books {
title,
isbn
}
}
Query
对象
创建 在创建了 GraphusClient
和模型后,您就可以创建第一个 Query
对象
let authorsQuery = Query("authors", model: Author.self)
此外,您还可以添加一些参数(请参阅参数部分)
let authorArguments: Arguments = [
"filter": [
"age": 24
]
]
let authorsQuery = Query("authors", arguments: authorArguments, model: Author.self)
另外,如果您不想,您也可以使用 [Field]
数组
let fields: [Field] = ["firstName", "secondName"]
let authorsQuery = Query("authors", fields: fields)
创建客户端
在大多数情况下,您会希望创建一个单一的共享实例的 GraphusClient
并将它指向您的 GraphQL 服务器。最简单的方法是定义一个全局变量
var client: GraphusClient = {
let configuration = URLSessionConfiguration.default
// Add additional headers as needed
configuration.httpAdditionalHeaders = ["Authorization": "Bearer <token>"] // Replace `<token>`
let url = URL(string: "https://:8080/graphql")!
return GraphusClient(url: url, configuration: configuration)
}()
向服务器发送请求
待办事项
参数
待办事项
许可协议
Graphus
采用 MIT 许可协议发布。有关详细信息,请参阅 LICENSE.md
。
联系方式
如果您需要开发应用程序或 UI,请通过 [email protected] 或通过 Telegram 给我发消息。我开发 iOS 应用和设计。我使用 swift
进行开发。要请求更多功能,您应该创建一个新的问题。