Openwhisk Swift SDK

platforms available swift version swift version

这是一个用于与 OpenWhisk 交互的原生 SDK。

OpenWhisk 是一个基于创建和调用“动作 (actions)”的无服务器平台。要了解更多关于如何使用 OpenWhisk 的信息,请访问这里

信条

目标是永远,永远,永远不要将原始数据返回给 OpenWhisk 的使用者。永远使用原生对象。

设置

您可以将此 SDK 与 Swift Package Manager 集成。将以下行添加到您的 Package.swift 文件中

import PackageDescription

let package = Package(
    name: "YOUR_PROJECT_NAME",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/dokun1/openwhisk-swift-sdk.git", majorVersion: 0)
    ]
)

更新 manifest 文件后,在命令行中输入 swift build,项目应该可以解析其依赖项。

在您的项目中,您需要首先设置一个 Agent 的实例。使用 Agent 实例时,必须设置四个属性

let newAgent = Agent()
newAgent.apiKey = "enter API key here"
newAgent.secret = "enter secret here"
newAgent.namespace = "enter namespace here"
newAgent.host = "enter host here"

之后,您可以使用 Agent 实例发出请求。

功能

getActions

您可以像这样检索命名空间中的动作列表

agent.getActions() { actions, error in

}

传递到闭包中的结果是 Action 类型的集合。请查看类文档以获取有关此对象的信息。

getActionDetail

如果您有一个 Action 的实例,您可以选择获取该动作的详细信息,例如源代码,使用以下函数

agent.getActionDetail(action) { details, error in

}

传递到闭包中的结果是 ActionDetail 类型的实例。请查看类文档以获取有关此对象的信息。

invoke

如果您有一个 Action 的实例,您可以通过多种方式调用它。 调用一个动作有两个先决条件。

  1. 您必须提供一个符合 Codable 协议的输入对象。
  2. 您必须提供一个符合 Codable 协议的输出对象类型。

举例来说,假设我有一个动作,它根据国家/地区代码检索比特币的价格。在 JSON 中,我的输入如下所示

{"code": "USD"}

我需要创建一个相应的 Codable 对象,如下所示

struct Currency: Codable {
    var code: String
}

let input = Currency(code: "USD")

我们还假设我的潜在输出(以 JSON 格式)如下所示

{
    "currency": {
        "currencyCode": "USD",
        "name": "Bitcoin",
        "value": 5844.8963
    }
}

然后,我需要创建一个相应的 Codable 类型,如下所示

struct CurrencyResponse: Codable {
    var currency: CurrencyResponseCurrency
    
    struct CurrencyResponseCurrency: Codable {
        var currencyCode: String
        var name: String
        var value: Double
    }
}

定义了这两个类型后,我就可以像这样调用这样的动作

agent.invoke(action: action, input: Currency(code: "USD"), responseType: CurrencyResponse.self, blocking: true, resultOnly: false, completion: { response, error in

})

此调用中有两个参数,blockingresultOnly,它们可能会产生三种可能的回应。 OpenWhisk 通常本质上是异步的,这意味着默认行为将返回一个名为 activationId 的令牌,以便在动作完成其工作时兑换响应。 此函数中这两个参数的默认值均为 false

计划

我完全知道已经有一个 Swift SDK 用于 OpenWhisk 这里。这个可以做得更好吗?时间会证明一切。

感谢 James Thomas 在从波士顿飞往奥斯汀的航班上向我施压,让我尝试一下这个。