测试测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2016年12月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✓ |
由 Felix Dietz 维护。
一个 Swift 组件,使用 DSL 声明 GraphQL 查询,并从它们中获取字符串表示形式。
针对 iOS 8+
、WatchOS 2
、tvOS
和 Mac OS X
应用编写。
如果您不使用 CocoaPods,您仍然可以将 GraphQLicious
添加为子模块,将 GraphQLicious.xcodeproj
拖放到您的项目中,并在您的目标中嵌入 GraphQLicious.framework
。
GraphQLicious.xcodeproj
拖到您的项目中GraphQLicious.framework
您可以直接将所需的文件拖放到您的项目中,但请注意,这种方式您无法自动获取所有最新的功能。
这些文件包含在 Sources
文件夹中,适用于 iOS
框架
让我们假设,我们有一个文章的 id,我们想要获取该文章的 headline
、body
文本以及 opener image
。
ours graphQL query 将看起来像这样
query {
test: content(id: 153082687){
...contentFields
}
}
fragment contentFields on Content {
headline,
body,
image(role: "opener", enum: [this, that]){
...imageContent
}
}
fragment imageContent on Image {
id
url
}
fragment urlFragment on Image {
url (ratio: 1, size: 200)
}
首先,让我们创建一个 Fragment
来获取图像的内容,即图像的 id
和图像的 url
let imageContent = Fragment(
withAlias: "imageContent",
name: "Image",
fields: [
"id",
"url"
]
)
然后,我们将嵌入 Fragment
到一个获取打开图像的 Request
中。
注意: Argument
值为 String
类型时,将自动用引号表示。
GraphQL 还给我们提供了将自定义枚举作为参数值的机会。您只需让您的枚举实现 ArgumentValue
即可。
enum customEnum: String, ArgumentValue {
case This = "this"
case That = "that"
private var asGraphQLArgument: String {
return rawValue // without quotes
}
}
let customEnumArgument = Argument(
key: "enum",
values: [
customEnum.This,
customEnum.That
]
)
let imageContentRequest = Request(
name: "image",
arguments: [
Argument(key: "role", value: "opener"),
customEnumArgument
],
fields: [
imageContent
]
)
现在我们有一个嵌入 Fragment
的请求。让我们再走一步。
如果我们想的话,我们还可以将这个请求嵌入到另一个 Fragment
中。(我们也可以将 Fragment
嵌入到 Fragment
中)
除了带有 id 和 url 的打开图像外,我们还想获取文章的 headline
和 body
文本。
let articleContent = Fragment(
withAlias: "contentFields",
name: "Content",
fields: [
"headline",
"body",
imageContentRequest
]
)
最后,我们将所有内容组合成一个 Query
。Query 总有一个顶层请求来开始 everything,并需要所有内部的 Fragment。
let query = Query(request: Request(
withAlias: "test",
name: "content",
arguments: [
Argument(key: "id", values: [153082687])
],
fields: [
articleContent
]),
fragments: [articleContent, imageContent]
)
现在我们只需要在我们的 Query 上调用 create()
就可以了。
print(query.create())
假设我们想在后端更改我们的用户名和年龄,并希望新名称和年龄回传,以确保一切正常。
进一步假设,我们的服务器提供了一个用于上述目的的 mutating 方法 editMe
。
ours graphQL query 将看起来像这样
mutation myMutation {
editMe(
name: "joe",
age: 99
)
{
name,
age
}
}
让我们首先创建真正的 mutating 函数。为此我们可以使用一个 Request
。作为 Argument
values
,我们给出有关应更改哪些字段以及实际更改的信息
let mutatingRequest = Request(
name: "editMe",
arguments: [
Argument(name: "name", value: "joe"),
Argument(name: "age", value: 99)
],
fields: [
"name",
"age"
]
)
最后,我们将所有内容组合成一个 Mutation
。
Mutation
与 Query
的操作方式相同
let mutation = Mutation(
withAlias: "myMutation",
mutatingRequest: mutatingRequest
)
完成上述步骤后,我们可以创建请求。
print(mutation.create())
0.8
到 0.9
ReadingRequest
现在简单地成为 Request
。MutatingRequest
已被删除,您可以用 Request
代替。MutatingArgument
已被删除,您可以用 Argument
代替。MutatingValue
和 MutatingField
已被删除,您可以用 Argument
、ObjectValue
或 ObjectKeyValuePair
代替。GraphQLicious
由 WeltN24 内部开发。
Felix Dietz,[email protected],@wlkntlknstvnhwkn(@joemcbomb)在 GitHub 上,@joemcbomb 在推特上
Vittorio Monaco,[email protected],@vittoriom 在 GitHub 上,@Vittorio_Monaco 在推特上
GraphQLicious
在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。