swift - 在 OpenWhisk 上使用 Swift 发出 HTTP 请求?

标签 swift openwhisk serverless-architecture

在 Apache OpenWhisk 上运行的无服务器 Swift 函数期间,如何发出 HTTP 请求来检索和返回数据?

无服务器云平台限制对运行时环境的访问。这意味着您不能安装额外的库来帮助解决这个问题,例如 https://github.com/Alamofire/Alamofire .

最佳答案

Apache OpenWhisk 上的 Swift 运行时确实提供了以下预安装的库:

Kitura-net 库提供了比 Swift 的网络原语 (URLSession) 更高级的 API 来发出 HTTP 请求。

下面是一个使用该库从外部 JSON API 返回数据作为函数响应的示例。

import KituraNet
import Foundation
import SwiftyJSON

func httpRequestOptions() -> [ClientRequest.Options] {
  let request: [ClientRequest.Options] = [ 
    .method("GET"),
    .schema("https://"),
    .hostname("api.coindesk.com"),
    .path("/v1/bpi/currentprice.json")
  ]

  return request
}

func currentBitcoinPricesJson() -> JSON? {
  var json: JSON = nil
  let req = HTTP.request(httpRequestOptions()) { resp in
    if let resp = resp, resp.statusCode == HTTPStatusCode.OK {
      do {
        var data = Data()
        try resp.readAllData(into: &data)
        json = JSON(data: data)
      } catch {
        print("Error \(error)")
      }
    } else {
      print("Status error code or nil reponse received from App ID server.")
    }
  }
  req.end()

  return json
}

func main(args: [String:Any]) -> [String:Any] {
  guard let json = currentBitcoinPricesJson() else {
      return ["error": "unable to retrieve JSON API response"]
  }

  guard let rate = json["bpi"]["USD"]["rate_float"].double else {
    return [ "error": "Currency not listed in Bitcoin prices" ]
  }

  return ["bitcoin_to_dollars": rate]
}

仍然可以使用 Swift 的低级网络原语手动发出 HTTP 请求。

关于swift - 在 OpenWhisk 上使用 Swift 发出 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640220/

相关文章:

openwhisk - 在 Mac 上安装 OpenWhisk CLI

node.js - openwhisk actions/IBM Cloud Functions 中的第三方 npm 包

serverless-framework - provider.logRetentionInDays 未按预期工作

amazon-web-services - cloudfront处于无缓存模式

ios - SWRevealViewController 无法工作,因为类型 'XX-ViewController' 的值没有成员 'revealViewController'

ios - Swift - 单击按钮后重新启动动画

ios - 将核心数据值传递到文本字段中以进行编辑/保存

json - 异步问题 JSON Swift

go - 如何在 OpenWhisk 上使用 redis 包运行 Go 函数?

java - 在生产 Java SDK 中向表添加和删除属性的 DynamoDB 解决方案