这是一个用于与 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
实例发出请求。
您可以像这样检索命名空间中的动作列表
agent.getActions() { actions, error in
}
传递到闭包中的结果是 Action
类型的集合。请查看类文档以获取有关此对象的信息。
如果您有一个 Action
的实例,您可以选择获取该动作的详细信息,例如源代码,使用以下函数
agent.getActionDetail(action) { details, error in
}
传递到闭包中的结果是 ActionDetail
类型的实例。请查看类文档以获取有关此对象的信息。
如果您有一个 Action
的实例,您可以通过多种方式调用它。 调用一个动作有两个先决条件。
Codable
协议的输入对象。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
})
此调用中有两个参数,blocking
和 resultOnly
,它们可能会产生三种可能的回应。 OpenWhisk 通常本质上是异步的,这意味着默认行为将返回一个名为 activationId
的令牌,以便在动作完成其工作时兑换响应。 此函数中这两个参数的默认值均为 false
。
blocking
设置为 false
,则将返回一个令牌以供稍后兑换(此功能尚未构建到 SDK 中)blocking
设置为 true
并且 resultOnly
设置为 false
,则该动作将完成并发送完整的响应,包括函数的结果,该结果位于根据您的响应对象指定的原生上下文中blocking
设置为 true
并且 resultOnly
设置为 true
,则该动作将完成并且仅发送函数的结果,而没有被调用动作的元数据。我完全知道已经有一个 Swift SDK 用于 OpenWhisk 这里。这个可以做得更好吗?时间会证明一切。
感谢 James Thomas 在从波士顿飞往奥斯汀的航班上向我施压,让我尝试一下这个。