GraphQLicious 0.8.2

GraphQLicious 0.8.2

测试测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2016年12月
SwiftSwift 版本3.0
SPM支持 SPM

Felix Dietz 维护。



  • 作者:
  • Felix Dietz

GraphQLicious

一个 Swift 组件,使用 DSL 声明 GraphQL 查询,并从它们中获取字符串表示形式。
针对 iOS 8+WatchOS 2tvOSMac OS X 应用编写。

内容

安装

子模块

如果您不使用 CocoaPods,您仍然可以将 GraphQLicious 添加为子模块,将 GraphQLicious.xcodeproj 拖放到您的项目中,并在您的目标中嵌入 GraphQLicious.framework

  • GraphQLicious.xcodeproj 拖到您的项目中
  • 选择您的应用目标
  • 在“嵌入式二进制”部分中点击 + 按钮
  • 添加 GraphQLicious.framework

手动

您可以直接将所需的文件拖放到您的项目中,但请注意,这种方式您无法自动获取所有最新的功能。
这些文件包含在 Sources 文件夹中,适用于 iOS 框架

用法

查询

让我们假设,我们有一个文章的 id,我们想要获取该文章的 headlinebody 文本以及 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 的打开图像外,我们还想获取文章的 headlinebody 文本。

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())

Mutation

假设我们想在后端更改我们的用户名和年龄,并希望新名称和年龄回传,以确保一切正常。

进一步假设,我们的服务器提供了一个用于上述目的的 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

MutationQuery 的操作方式相同

let mutation = Mutation(
    withAlias: "myMutation",
    mutatingRequest: mutatingRequest
)

完成上述步骤后,我们可以创建请求。

print(mutation.create())

破坏性更改

0.80.9

  • ReadingRequest 现在简单地成为 Request
  • MutatingRequest 已被删除,您可以用 Request 代替。
  • MutatingArgument 已被删除,您可以用 Argument 代替。
  • MutatingValueMutatingField 已被删除,您可以用 ArgumentObjectValueObjectKeyValuePair 代替。

作者

GraphQLicious 由 WeltN24 内部开发。

贡献者

Felix Dietz,[email protected]@wlkntlknstvnhwkn@joemcbomb)在 GitHub 上,@joemcbomb 在推特上

Vittorio Monaco,[email protected]@vittoriom 在 GitHub 上,@Vittorio_Monaco 在推特上

许可证

GraphQLicious 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。