Graphus 2.1.6

Graphus 2.1.6

Ilya Kharlamov 维护。



Graphus 2.1.6

  • Ilya Kharlamov

Graphus

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 进行开发。要请求更多功能,您应该创建一个新的问题。